ไม่พบ install-sh, install.sh หรือ shtool ใน ac-aux


81

นี่เป็นครั้งแรกที่ฉันพยายามรวบรวมและติดตั้งทุกอย่างในเครื่อง Linux ฉันได้รับhttps://github.com/processone/exmppเวอร์ชันล่าสุดผ่าน git และอ่านคำแนะนำที่ระบุว่า:

2. สร้างและติดตั้ง

Exmpp ใช้ Autotools ดังนั้นกระบวนการจึงค่อนข้างบ่อย:

$ ./configure
$ make
$ sudo make install

หลังจากพิมพ์./configureฉันได้รับข้อผิดพลาด

ไม่พบ install-sh, install.sh หรือ shtool ใน ac-aux

Google แทบไม่มีความช่วยเหลือเลย ไม่แน่ใจในสิ่งที่ฉันควรจะทำ ความช่วยเหลือใด ๆ ที่จะได้รับการชื่นชมมาก

คำตอบ:


109

ฉันได้มันมาเพื่อสร้างสคริปต์กำหนดค่าโดยใช้เครื่องมือต่อไปนี้:

libtoolize --force
aclocal
autoheader
automake --force-missing --add-missing
autoconf
./configure

ฉันไม่มีการอ้างอิงทั้งหมดดังนั้นฉันจึงไม่สามารถทดสอบได้ในตอนนี้ แต่โดยทั่วไปแล้วคุณจะสร้างสคริปต์กำหนดค่าจากไฟล์ ac ได้อย่างไร


2
คำแนะนำใน README อาจถูกคัดลอกมาจากที่อื่นอย่างสุ่ม ๆ ฉันต้องยอมรับว่าฉันไม่เข้าใจทุกรายละเอียดของ autoconf toolchain มันเป็นชุดของมาโครที่สร้างขึ้นและใช้เพื่อสร้างสคริปต์กำหนดค่าของคุณ (ซึ่งในที่สุดก็กำหนดขั้นตอนสำหรับการรวบรวมและกระบวนการติดตั้ง) ฉันไม่เคยต้องปรับแต่งสิ่งเหล่านี้ดังนั้นฉันจึงไม่ใช่ผู้เชี่ยวชาญ แต่มีคำอธิบายมากมายพอสมควรที่นี่
sebastian_k

12
หมายเหตุถึงโปรแกรมเมอร์: โปรดหยุดใช้เครื่องมือ autoake กรุณา
Qix

1
@ Qix คุณช่วยอธิบายหน่อยได้ไหมว่าทำไม?
Sergei

4
@ Sergei มันยุ่งช้าและหยุดพักอย่างต่อเนื่อง มัน clutters ขึ้นกำหนดและไม่น่าเชื่อมายากล วิธีจัดการกับการพึ่งพา (หรือขาดมัน) ทำให้เกิดข้อความแสดงข้อผิดพลาดที่คลุมเครือและไฟล์ที่สร้างขึ้นนั้นไม่สามารถอ่านได้อย่างดีที่สุดและเสียอย่างกะทันหันอย่างรุนแรงที่สุด
Qix

4
@ Sergei CMake เป็นไปได้มากที่สุด ณ เวลานี้ในความคิดของฉัน ฉันแน่ใจว่าจะมีสิ่งที่ดีกว่าในอนาคต (ใกล้)
Qix

40

ดีฉันพยายามตอบ sebastian_k และมันก็ไม่ได้ทำงานสำหรับฉัน ( ./configureตกผ่านครึ่งทางกับข้อผิดพลาดที่แปลกมาก)

สิ่งใดที่ใช้ได้ผลสำหรับฉันคือการคัดลอกคำแนะนำที่ใช้ในบันทึกการทำงานนี้ที่ฉันพบ

เวอร์ชั่นสั้น (ดังนั้นคุณไม่จำเป็นต้องลุยเลย) คือ:

$ autoreconf -vif
$ ./configure --prefix=/usr/lib/erlang/lib
$ make
$ sudo make install

16
+1 autoreconf -iเป็นคำตอบที่ถูกต้อง ( vและfมักจะเป็นตัวเลือก)
Nemo

2
+1 นี่เป็นคำตอบเดียวที่เหมาะกับฉัน
weberc2

@Nemo หนึ่งที่ดี คำตอบที่ได้รับการยอมรับใช้งานได้ในทางเทคนิค แต่คำตอบของคุณนั้นง่ายที่สุด
Avindra Goolcharan

9

คำถามนี้และคำตอบอื่น ๆ ส่วนใหญ่ที่นี่เกิดขึ้นจากความเข้าใจผิดว่าโครงการที่ใช้ระบบGNU Build (Autotools) เป็นที่รู้จักกันอย่างไร ในความเป็นจริงในกรณีของไลบรารี Erlang XMPP ที่กล่าวถึงโดย OP ความเข้าใจผิดที่ปรากฏอยู่ในส่วนของผู้พัฒนา

การรับซอฟต์แวร์อย่างถูกวิธี

หากสิ่งที่คุณต้องการจะทำคือรวบรวมและติดตั้งโครงการออกมาพร้อมกับ GNU Autotools แล้วคุณไม่ควรตรวจสอบออกจากระบบการควบคุมแหล่งที่มา คุณควรดาวน์โหลดแหล่งที่มาของแพ็กเกจที่นักพัฒนาซอฟต์แวร์จัดทำแทน โดยปกติจะอยู่ในรูปแบบของ tarballs ที่เผยแพร่บนเว็บไซต์ของโครงการ สำหรับโครงการที่โฮสต์บน GitHub, Savannah หรือบริการโฮสติ้งที่คล้ายกันทั้งหมด tarballs เหล่านี้มักจะพบหลังลิงค์ "ดาวน์โหลด" หรือ "เผยแพร่" คุณยกเลิกแพ็กเกจและพูดให้แตกต่างจาก./configure && make && sudo make installคาถามาตรฐาน นั่นคือทั้งหมด; คุณไม่จำเป็นต้องเรียกใช้ GNU Autotools ใด ๆ และไม่จำเป็นต้องติดตั้ง GNU Autotools ในระบบของคุณ

เหตุผลที่คุณผู้ใช้ไม่จำเป็นต้อง Autotools GNU รวบรวมโครงการ Autotools บรรจุคือการที่นักพัฒนาได้แล้วใช้โปรแกรม Autotools ต่าง ๆ เพื่อสร้าง "การกระจาย tarball" ที่สามารถนำมาใช้ในการสร้างซอฟต์แวร์ใด ๆ ระบบเหมือน Unix tarball แจกจ่ายประกอบด้วยconfigureสคริปต์แบบพกพาสูงที่สแกนสภาพแวดล้อมการสร้างตรวจสอบการอ้างอิงและสร้างการMakefileกำหนดเองให้กับระบบของคุณ

ดังนั้นเมื่อใดที่คุณต้องการ Autotools

เหตุผลเดียวที่คุณควรติดตั้งและเรียกใช้ GNU Autotools ด้วยตนเองคือถ้าคุณต้องการทำงานพัฒนาในโครงการที่สร้างขึ้นด้วย Autotools และถึงตอนนั้นคุณอาจไม่ต้องการใช้ Autotools จนกว่าคุณจะเปลี่ยนการอ้างอิงของโครงการ ในกรณีที่คุณแน่นอนจะต้องตรวจสอบแหล่งที่มาให้การเปลี่ยนแปลงที่เหมาะสมกับ Autotools เฉพาะไฟล์ข้อมูล ( configure.ac, Makefile.amฯลฯ ) และเรียกใช้ Autotools ที่พวกเขาจะสร้างใหม่configureไฟล์ หากคุณต้องการเผยแพร่แพ็คเกจที่แก้ไขแล้วอย่างอิสระคุณจะต้องใช้ Makefile ที่สร้างขึ้นโดย Autotools เพื่อสร้าง tarball การกระจายแบบใหม่จากนั้นเผยแพร่ tarball แบบออนไลน์

ปัญหาคือนักพัฒนาบางคนทำให้แหล่งเก็บข้อมูลของพวกเขาเปิดเผยต่อสาธารณชน แต่ละเลยที่จะเผยแพร่ tarballs การกระจายของพวกเขา (หรือทำให้มันยากที่จะหาที่พวกเขาเผยแพร่ ตัวอย่างเช่นแทนที่จะเผยแพร่ tarballs กระจายของพวกเขาเป็น GitHub ข่าวที่GitHub ข่าวห้องสมุด Erlang XMPP ของมี tarballs ของพื้นที่เก็บข้อมูลแหล่งที่มาของวัตถุดิบ สิ่งนี้ทำให้ไม่สามารถคอมไพล์โปรเจ็กต์โดยไม่มี GNU Autotools เอาชนะจุดประสงค์ทั้งหมดของการใช้ Autotools ตั้งแต่แรก

สรุป TL; DR

Autotools ของ GNU เป็นสิ่งที่นักพัฒนาซอฟต์แวร์ใช้ในการทำแพ็คเกจซอร์สโค้ดแบบพกพาสำหรับผู้ใช้ ผู้ใช้ควรดาวน์โหลดและรวบรวมจากแพ็คเกจแหล่งข้อมูลเหล่านี้ไม่ใช่รหัสต้นฉบับจากระบบควบคุมแหล่งที่มา หากนักพัฒนาไม่ได้จัดทำแพ็คเกจแหล่งข้อมูลเหล่านี้แสดงว่าพวกเขาไม่ได้ใช้ Autotools อย่างถูกต้องและควรตบเบา ๆ ด้วยปลาเทราต์เปียกจนกว่าพวกเขาจะเห็นข้อผิดพลาดของวิธีการของพวกเขา


โพสต์ที่มีความยาวนี้เกี่ยวข้องกับคำถามอย่างไร OP พยายามใช้ autotools หรือไม่ พวกเขาดาวน์โหลดบางอย่างนุ่มนวลและวิ่ง./configure && make && sudo make installตามที่คุณแนะนำในวรรคสอง
Pilot6

3
มันเกี่ยวข้องเนื่องจากซอฟต์แวร์ที่ดาวน์โหลดโดย OP ไม่มีสคริปต์กำหนดค่าที่ถูกต้อง (และเวอร์ชันล่าสุดในการควบคุมแหล่งที่มารวมถึง tarball ที่วางจำหน่ายแล้วไม่มีสคริปต์กำหนดค่าเลย) คำตอบเกือบทั้งหมดที่นี่บอก OP ให้เรียกใช้ Autotools ขณะนี้อาจแก้ไขปัญหาได้ แต่สิ่งสำคัญคือต้องเข้าใจสาเหตุของปัญหา: ผู้พัฒนาเป็นผู้รับผิดชอบในการเรียกใช้ Autotools และพวกเขาไม่ได้ทำอย่างถูกต้อง (หรือเลย)
Psychonaut

1
นี่เป็นคำตอบที่ดีและถึงแม้ว่าฉันชอบวลี "ตบเบา ๆ ด้วยปลาเทราท์เปียก" มันอาจจะเหมาะสมกว่าที่จะกล่าวถึงการตอบสนองที่ถูกต้องอย่างชัดเจนคือการรายงานข้อผิดพลาดต้นน้ำ
วิลเลียม Pursell

1
@ วิลเลียมเพอร์เซลฉันคิดว่าการเล่นสำนวนมีวัตถุประสงค์ :)
Psychonaut

4

ฉันมีปัญหานี้และพบว่าเป็นเพราะบรรทัดต่อไปนี้ในconfigure.ac:

AC_CONFIG_AUX_DIR([build-aux])

บรรทัดไม่เลวต่อ se อย่างไรก็ตามต้องย้ายเข้าไปใกล้ส่วนบนของconfigure.acไฟล์


3

โปรดทำดังต่อไปนี้เพื่อแก้ไขปัญหานี้

sudo apt-get install autogen libtool shtool

จากนั้นทำการติดตั้ง

sh autogen.sh --prefix=prefered_install_path
make 
make install 

2

เมื่อพยายามคอมไพล์ GNU Octave จาก Mercurial repository คุณอาจเจอปัญหานี้ การแก้ไขคือการเรียกใช้./bootstrapในขณะที่อยู่ในรากของต้นไม้ต้นกำเนิด



0

ฉันมีปัญหาที่คล้ายกันเมื่อฉันพยายาม./configureรหัสแหล่งที่มาและได้รับข้อผิดพลาดเช่นเดียวกับที่โพสต์ ในที่สุดก็แก้ไขปัญหาของฉันโดยการป้อนรหัส:

sudo apt-get install autotools-dev

2
ข้อผิดพลาด: ไม่สามารถระบุตำแหน่งเครื่องมืออัตโนมัติแพ็คเกจ
Mauricio Scheffer

กันที่นี่ ข้อผิดพลาด: ไม่สามารถระบุตำแหน่งเครื่องมืออัตโนมัติแพ็คเกจ downvoted ขอโทษ
PJunior

ฉันได้ติดตั้งแพ็กเกจนั้นแล้วไม่ว่ามันจะเป็นอะไร กำหนดค่าสคริปต์จะถูก borked อย่างไรก็ตาม
Boann

0

หลังจากติดตั้งautogenแพ็คเกจข้อผิดพลาดนี้ได้รับการแก้ไขในwolfSSLบิลด์

sudo apt-get install autogen libtool shtool

0

ฉันมีข้อผิดพลาดแตกต่างกันเล็กน้อย:

configure: error: cannot find install-sh, install.sh, or shtool in "." "./.." "./../.."

ปรากฎว่าการกำหนดค่าไม่สามารถหาbuild-aux/install-shได้ ฉันเชื่อมโยงมันอย่างนั้น

ln -s build-aux/install-sh .

จากนั้นมันจะสร้าง

หวังว่าจะช่วยให้ใครบางคนที่นั่น!

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.