Không thể tìm thấy install-sh, install.sh hoặc shtool trong ac-aux


81

Đây là lần đầu tiên tôi cố gắng biên dịch và cài đặt bất cứ thứ gì trên máy linux. Tôi đã nhận được phiên bản mới nhất của https://github.com/ Processone / exmpp thông qua git và đọc hướng dẫn trạng thái:

2. Xây dựng và cài đặt

Exmpp sử dụng Autotools. Do đó quá trình này khá phổ biến:

$ ./configure
$ make
$ sudo make install

Sau khi loại ./configuretôi nhận được lỗi

Không thể tìm thấy install-sh, install.sh hoặc shtool trong ac-aux

Google rất ít để giúp đỡ. Không chắc chắn tất cả những gì tôi phải làm. bất kì sự trợ giúp nào đều được đánh giá cao

Câu trả lời:


109

Tôi đã nhận nó để tạo tập lệnh cấu hình bằng các công cụ sau:

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

Tôi không có tất cả các phụ thuộc vì vậy tôi không thể kiểm tra nó ngay bây giờ, nhưng đây thường là cách bạn sẽ tạo một tập lệnh cấu hình từ một tệp ac.


2
Các hướng dẫn trong README có thể được sao chép một cách mù quáng từ một nơi khác. Tôi phải thừa nhận rằng tôi không hiểu từng chi tiết của chuỗi công cụ autoconf; về cơ bản, nó là một tập hợp các macro được tạo và sử dụng để tạo tập lệnh cấu hình của bạn (lần lượt, đặt giai đoạn cho quá trình biên dịch và cài đặt). Tôi chưa bao giờ phải tinh chỉnh những thứ này, vì vậy tôi không phải là chuyên gia, nhưng có một số giải thích khá rộng rãi ở đây
sebastian_k

12
Lưu ý cho các lập trình viên: vui lòng ngừng sử dụng chuỗi công cụ tự động. Xin vui lòng .
Qix

1
@Qix, bạn có thể, xin vui lòng, giải thích cho chúng tôi tại sao?
Sergei

4
@Sergei nó lộn xộn, chậm chạp và phá vỡ liên tục. Nó lộn xộn xác định và là vô cùng kỳ diệu . Cách xử lý các phụ thuộc (hoặc thiếu) của nó đưa ra các thông báo lỗi khó hiểu và các tệp mà nó tạo ra không thể đọc được ở mức tốt nhất và bị phá vỡ ác mộng ở mức tồi tệ nhất.
Qix

4
@Sergei CMake là khả thi nhất tại thời điểm này theo ý kiến ​​của tôi. Tôi chắc chắn sẽ có một cái gì đó tốt hơn trong tương lai (gần).
Qix

40

Chà, tôi đã thử câu trả lời của sebastian_k và nó không hoạt động với tôi ( ./configurebị rơi giữa chừng với một lỗi cực kỳ kỳ lạ).

Những gì đã làm, tuy nhiên công việc đối với tôi là sao chép các hướng dẫn được sử dụng trong nhật ký xây dựng này mà tôi tìm thấy

Phiên bản ngắn (vì vậy bạn không phải tự mình lội qua nó) là:

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

16
+1. autoreconf -ilà câu trả lời đúng ( vfthường là tùy chọn)
Nemo

2
+1. Đây là câu trả lời duy nhất làm việc cho tôi.
weberc2

@Nemo đẹp một cái. Câu trả lời được chấp nhận về mặt kỹ thuật hoạt động, nhưng của bạn là đơn giản nhất cho đến nay.
Avindra Goolcharan

9

Câu hỏi này và hầu hết các câu trả lời khác ở đây, phát sinh từ sự hiểu lầm về cách các dự án sử dụng Hệ thống Xây dựng GNU (còn gọi là Autotools) được phân phối. Trên thực tế, trong trường hợp thư viện Erlang XMPP được OP đề cập, sự hiểu lầm dường như thuộc về các nhà phát triển.

Lấy phần mềm đúng cách

Nếu tất cả những gì bạn muốn làm là biên dịch và cài đặt một dự án được phát hành với GNU Autotools, thì bạn không nên kiểm tra nó từ hệ thống kiểm soát nguồn . Thay vào đó, bạn nên tải xuống bản phát hành nguồn đóng gói được cung cấp bởi nhà phát triển. Chúng thường có dạng tarball được phân phối trên trang web của dự án. Đối với các dự án được lưu trữ hoàn toàn trên GitHub, Savannah hoặc một số dịch vụ lưu trữ tương tự, các tarball này thường sẽ được tìm thấy đằng sau một số liên kết có nhãn "Tải xuống" hoặc "Phát hành". Bạn mở gói và thốt ra một số biến thể của ./configure && make && sudo make installcâu thần chú tiêu chuẩn . Đó là tất cả; bạn không cần phải gọi bất kỳ Autotools GNU nào và thậm chí không cần cài đặt GNU Autotools trên hệ thống của bạn.

Lý do mà bạn, người dùng, không cần GNU Autotools để biên dịch dự án đóng gói Autotools là vì nhà phát triển đã sử dụng các chương trình Autotools khác nhau để tạo ra một "tarball phân phối" có thể được sử dụng để xây dựng phần mềm trên bất kỳ Hệ thống giống như Unix. Tarball phân phối chứa một configuretập lệnh có tính di động cao , quét môi trường xây dựng, kiểm tra các phụ thuộc và xây dựng một Makefiletùy chỉnh cho hệ thống của bạn.

Vậy khi nào bạn cần Autotools?

Lý do duy nhất bạn cần phải tự cài đặt và gọi GNU Autotools là nếu bạn muốn thực hiện công việc phát triển trên một dự án được xây dựng với Autotools. Và thậm chí sau đó, bạn có thể sẽ không cần Autotools trừ khi bạn thay đổi phụ thuộc của dự án. Trong trường hợp đó, bạn sẽ thực sự cần phải kiểm tra nguồn gốc, thực hiện thay đổi phù hợp với Autotools cụ thể tập tin đầu vào ( configure.ac, Makefile.am, vv), và chạy Autotools vào chúng để tạo ra một mới configuretập tin. Nếu bạn muốn xuất bản độc lập gói sửa đổi, thì bạn sẽ sử dụng Makefile được tạo bởi Autotools để tạo tarball phân phối mới, sau đó xuất bản tarball đó ở đâu đó trực tuyến.

Vấn đề là một số nhà phát triển làm cho kho lưu trữ nguồn của họ có sẵn công khai nhưng bỏ qua việc xuất bản tarball phân phối của họ (hoặc gây khó khăn cho việc tìm nơi xuất bản). Ví dụ, thay vì xuất bản tarball phân phối của họ dưới dạng Phát hành GitHub , GitHub của thư viện Erlang XMPP là tarball của kho lưu trữ nguồn thô. Điều này khiến cho không thể biên dịch dự án mà không có GNU Autotools, đánh bại toàn bộ mục đích sử dụng Autotools ngay từ đầu.

Tóm tắt TL; DR

GNU Autotools là thứ mà các nhà phát triển sử dụng để tạo các gói mã nguồn di động cho người dùng. Người dùng nên tải xuống và biên dịch từ các gói nguồn này, không phải mã gốc từ hệ thống kiểm soát nguồn. Nếu các nhà phát triển không cung cấp các gói nguồn này, thì họ không sử dụng Autotools một cách chính xác và nên được vỗ nhẹ bằng một con cá hồi ướt cho đến khi họ thấy lỗi theo cách của họ.


Làm thế nào là bài viết dài này liên quan đến câu hỏi? OP đã thử sử dụng autotools? Họ đã tải xuống một số phần mềm và chạy ./configure && make && sudo make installnhư bạn đề xuất trong đoạn thứ hai.
Pilot6

3
Nó có liên quan vì phần mềm được OP tải xuống không chứa tập lệnh cấu hình chính xác (và phiên bản mới nhất trong kiểm soát nguồn, cộng với các tarball được phát hành, hoàn toàn không chứa tập lệnh cấu hình). Hầu như tất cả các câu trả lời ở đây đều bảo OP chạy Autotools. Mặc dù điều này có thể giải quyết được vấn đề, nhưng điều quan trọng là phải hiểu nguyên nhân cốt lõi: các nhà phát triển là những người chịu trách nhiệm chạy Autotools và họ đã không làm điều này một cách chính xác (hoặc hoàn toàn).
Phi hành gia

1
Đây là một câu trả lời tốt, và mặc dù tôi thích cụm từ "nhẹ nhàng tát với cá hồi ướt", có thể thích hợp hơn để đề cập rõ ràng phản hồi chính xác là báo cáo lỗi ngược dòng.
William Pursell

1
@WilliamPursell Tôi coi đó là ý định chơi chữ. :)
trụ

4

Tôi đã gặp vấn đề này và thấy rằng đó là do dòng sau trong configure.ac:

AC_CONFIG_AUX_DIR([build-aux])

Dòng này không tệ cho mỗi se, tuy nhiên nó cần được di chuyển đến gần đầu configure.actệp.


3

Hãy làm như sau để khắc phục vấn đề này,

sudo apt-get install autogen libtool shtool

Sau đó tiến hành cài đặt

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

2

Khi cố gắng biên dịch GNU Octave từ kho lưu trữ Mercurial, bạn có thể gặp phải vấn đề này. Cách khắc phục là chạy ./bootstraptrong khi đang ở trong thư mục gốc của cây nguồn.



0

Tôi đã gặp một vấn đề tương tự khi tôi thử ./configuremã nguồn và gặp lỗi tương tự như đã đăng. Cuối cùng đã giải quyết vấn đề của tôi bằng cách nhập mã:

sudo apt-get install autotools-dev

2
Lỗi: Không thể xác định vị trí autotools gói.
Mauricio Scheffer

Tương tự ở đây. Lỗi: Không thể xác định vị trí autotools gói. Bị hạ bệ. Lấy làm tiếc.
PJunior 18/07/2015

Tôi đã cài đặt gói đó, bất kể nó là gì. Tuy nhiên, cấu hình tập lệnh được borked.
Boann

0

Sau khi cài đặt autogengói, lỗi này đã được giải quyết trong bản wolfSSLdựng.

sudo apt-get install autogen libtool shtool

0

Tôi đã có một chút lỗi khác nhau:

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

Hóa ra cấu hình không thể tìm thấy build-aux/install-sh. Tôi đã liên kết nó như vậy

ln -s build-aux/install-sh .

sau đó nó xây dựng.

Hy vọng rằng sẽ giúp được ai đó ngoài kia!

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.