Не удается найти 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

Гугл мало чем помог. Совершенно не уверен, что я должен делать. Любая помощь приветствуется

Ответы:


109

Я получил его, чтобы создать скрипт конфигурации, используя следующие инструменты:

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

У меня нет всех зависимостей, поэтому я не могу проверить это прямо сейчас, но это, как правило, так, как вы бы создали скрипт configure из файла ac.


2
Инструкции в README, вероятно, были слепо скопированы откуда-то еще. Я должен признать, что я не понимаю всех деталей цепочки инструментов autoconf; в основном это набор макросов, которые создаются и используются для создания скрипта configure (который, в свою очередь, задает этап для процесса компиляции и установки). Я никогда не был точно настроить эти вещи, так что я не эксперт, но есть некоторые довольно обширные объяснения здесь
sebastian_k

12
Примечание для программистов: пожалуйста, прекратите использовать набор инструментов automake. Пожалуйста .
Qix

1
@Qix, не могли бы вы объяснить, почему?
Сергей

4
@ Сергей грязный, медленный и постоянно ломается. Это загромождает определения и невероятно волшебно . Его способ обработки зависимостей (или их отсутствия) дает загадочные сообщения об ошибках, а файлы, которые он создает, в лучшем случае нечитаемы, а в худшем случае кошмарно разбиты.
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

@ Немо хороший. Принятый ответ технически работает, но ваш самый простой на сегодняшний день.
Авиндра Гулчаран

9

Этот вопрос и большинство других ответов здесь возникают из-за неправильного понимания того, как распределяются проекты, использующие систему сборки GNU (или Autotools). Фактически, в случае библиотеки Erlang XMPP, упомянутой в OP, недоразумение, по-видимому, принадлежит разработчикам.

Правильно получить программное обеспечение

Если все, что вы хотите сделать, это скомпилировать и установить проект, выпущенный с помощью GNU Autotools, то вам не следует проверять его из системы контроля версий . Вместо этого вы должны загрузить упакованный исходный выпуск, предоставленный разработчиком. Они обычно принимают форму тарболлов, распространяемых на веб-сайте проекта. Для проектов, которые полностью размещены на GitHub, Savannah или подобном хостинг-сервисе, эти архивы обычно находятся по какой-либо ссылке, помеченной как «Скачать» или «Релизы». Вы распаковываете пакет и произносите какой-то вариант стандартного ./configure && make && sudo make installзаклинания. Вот и все; вам не нужно вызывать какие-либо из инструментов GNU Autotools, и вам даже не нужно устанавливать в вашей системе инструменты GNU Autotools.

Причина, по которой вам, пользователю, не нужны GNU Autotools для компиляции проекта, упакованного в Autotools, заключается в том, что разработчик уже использовал различные программы Autotools для создания «архива распространения», который можно использовать для сборки программного обеспечения на любом Unix-подобная система. Дистрибутивный дистрибутив содержит легко переносимый configureскрипт, который сканирует среду сборки, проверяет зависимости и создает Makefileиндивидуальные настройки для вашей системы.

Итак, когда вам нужны автоинструменты?

Единственная причина, по которой вам нужно самостоятельно установить и запустить GNU Autotools, - это если вы хотите заняться разработкой проекта, созданного с помощью Autotools. И даже тогда вам, вероятно, не понадобятся автоинструменты, если вы не измените зависимости проекта. В этом случае, вам действительно нужно будет проверить оригинальный источник, внести соответствующие изменения в Autotools конкретного входных файлов ( configure.ac, Makefile.amи т.д.), и запустить Autotools на них , чтобы создать новый configureфайл. Если вы хотите независимо публиковать исправленный пакет, то вы должны использовать Makefile, сгенерированный Autotools, для создания нового архива дистрибутива, а затем опубликовать этот архив где-нибудь в сети.

Проблема в том, что некоторые разработчики делают свой исходный репозиторий общедоступным, но забывают публиковать свои дистрибутивы (или затрудняются найти, где они опубликованы). Например, вместо того, чтобы публиковать свои tar-архивы распространения как GitHub Releases , релизы GitHub библиотеки Erlang XMPP являются tarballs из исходного хранилища исходного кода. Это делает невозможным компиляцию проекта без автоинструментов GNU, что в первую очередь сводит на нет все цели использования автоинструментов.

TL; DR сводка

GNU Autotools - это то, что разработчики используют для создания переносимых пакетов исходного кода для пользователей. Пользователи должны загружать и компилировать эти исходные пакеты, а не исходный код из системы контроля версий. Если разработчики не предоставляют эти исходные пакеты, то они не используют Autotools правильно, и их следует осторожно шлепать мокрой форелью, пока они не увидят ошибку своего пути.


Как этот длинный пост связан с вопросом? OP пытался использовать автоинструменты? Они скачали какую-то программу и побежали, ./configure && make && sudo make installкак вы предложили во втором абзаце.
Pilot6

3
Это актуально, потому что программное обеспечение, загруженное OP, не содержало корректного скрипта настройки (и самая последняя версия в управлении исходным кодом, плюс выпущенные архивы, вообще не содержат скрипта конфигурирования). Почти все ответы здесь говорят оператору о запуске Autotools. Хотя это может обойти проблему, важно понять основную причину: разработчики несут ответственность за запуск Autotools, и они не сделали это правильно (или вообще не сделали).
Psychonaut

1
Это хороший ответ, и хотя мне нравится фраза «мягко ударил мокрой форелью», возможно, было бы более уместным явно указать, что правильный ответ - сообщить об ошибке вверх по течению.
Уильям Перселл

1
@WilliamPursell Я так понимаю, каламбур предназначен. :)
Psychonaut

4

У меня была эта проблема, и я обнаружил, что это связано со следующей строкой configure.ac:

AC_CONFIG_AUX_DIR([build-aux])

Сама строка не была плохой, однако ее нужно было переместить ближе к началу configure.acфайла.


3

Пожалуйста, сделайте следующее, чтобы решить эту проблему,

sudo apt-get install autogen libtool shtool

Затем сделайте установку

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

2

При попытке скомпилировать GNU Octave из репозитория Mercurial вы можете столкнуться с этой проблемой. Исправление заключается в том, чтобы запускаться ./bootstrap, находясь в корне исходного дерева.



0

У меня была похожая проблема, когда я пытался ./configureисходный код и получил ту же ошибку, что и опубликованные. Наконец, решил мои проблемы, введя код:

sudo apt-get install autotools-dev

2
Ошибка: невозможно найти автоинструменты пакета.
Маурисио Шеффер

Тоже самое. Ошибка: невозможно найти автоинструменты пакета. Downvoted. Сожалею.
Юниор

Я уже установил этот пакет, что бы это ни было. Тем не менее, скрипт настройки не работает.
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 .

тогда это строит.

Надеюсь, что это поможет кому-то там!

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.