#java #jna #libtool #building
Вопрос:
Я хочу создать protobuf, поэтому я просто клонировал пакет и cd
поместил его в каталог. Когда я печатал ./autogen.sh
, произошла какая-то ошибка.
Я получаю обратный звонок:
configure.ac:104: error: possibly undefined macro: AC_PROG_LIBTOOL
If this token and others are legitimate, please use m4_pattern_allow.
See the Autoconf documentation.
autoreconf: /home/zhangxl/my/autoconf/bin/autoconf failed with exit status: 1
Кто-то сказал, что я должен установить libtool, но я уже установил autoconf, automaker, libtool и m4, но все они построены из исходного кода, потому что я не могу получить доступ к паролю sudo.
Это мой файл .bashrc:
export PATH=$PATH:/home/zhangxl/my/libtool/bin
export CPLUS_INCLUDE_PATH=/hpme/zhangxl/my/libtool/include:$CPLUS_INCLUDE_PATH
export LIBRARY_PATH=/home/zhangxl/my/libtool/lib:$LIBRARY_PATH
export LD_LIBRARY_PATH=/home/zhangxl/my/libtool/lib:$LD_LIBRARY_PATH
Я думаю, что, возможно, файл .bashrc неверен.
Комментарии:
1. Автокружки в основном (полностью?) ломаются, когда дело доходит до их обновления. Вы в основном должны использовать то, что предоставляет дистрибутив. (Я никогда не мог обновить их в Linux, Solaris или OS X; и администраторы фермы компиляции никогда не могли сделать это в AIX или Linux. Попытки использовать обновленные инструменты приводят к рогу изобилия неудач).
2. Скорее всего, вы добьетесь большего успеха, загрузив интересующий пакет на машину, на которой вы являетесь администратором, обновите его и переупакуете для целевой машины, а затем отправите обновленный пакет на целевую машину. По сути, вы создаете пакет в автономном режиме, как и сопровождающие.
3. FWIW, @jww, я несколько раз успешно обновлял автоинструменты на машинах Linux, которыми я управляю, в результате чего установки работают нормально. Единственное, что усложняло задачу, насколько я мог судить, была упаковка (я построил и установил сменные диски), а не сами автостолы. Конечно, «нормально работать» включает в себя обычные проблемы, связанные с определенными пакетами, у которых иногда возникают проблемы с версиями Autotools, отличными от тех, которые используют их сопровождающие.
4. Несколько лет назад, когда мне приходилось создавать программное обеспечение на OS X, перестройка всей системы сборки GNU (по крайней мере, для нашего кода) была в основном обязательной-предоставляемые OS X, как правило, смехотворно устарели. IIRC для Solaris я использовал системные пакеты сборки GNU SunFreeware вместо предоставленных.
5. Для всех, кто будет просматривать этот вопрос в будущем, я обнаружил, что этот вопрос лучше поможет объяснить, как исправить эту проблему на superuser.com/q/565988/876751 . В моем случае я установил autoconf, но не libtool, поэтому мне нужно было запустить
sudo apt-get install libtool
, чтобы устранить проблему.
Ответ №1:
libtool
это больше, чем просто (набор) двоичных файлов. он также включает в себя пару m4-макросов (которые будут использоваться autotools), в том числе AC_PROG_LIBTOOL
макрос.
Поскольку вы не выполнили «правильную» установку libtool, autoconf не находит эти дополнительные макросы.
Обратите внимание на такие файлы, как libtool.m4
, ltoptions.m4
… (вероятно, где-то внутри /home/zhangxl/my/libtool/share/aclocal/
и добавьте путь к autoreconf
вызову. Что-то вроде:
autoreconf -f -i -Wall,no-obsolete -I/home/zhangxl/my/libtool/share/aclocal/
(на случай , если вам интересно: autoreconf
вызывается autogen.sh
ближе к концу этого сценария; поэтому , когда вы позвонили autogen.sh
, большинство вещей уже удалось, только вызов autoreconf
не удался, и это то, что исправлено в приведенной выше строке. если вы хотите иметь возможность позвонить autogen.sh
еще раз, вы должны изменить линию с помощью функции autoreconf, как показано выше)
Ответ №2:
Убедитесь, что вы libtool
установили. Это сообщение об ошибке может быть выдано, autoconf
если его не удается найти libtool
в вашей системе. В моем случае ошибка выглядела немного так:
autoreconf: configure.ac: not using Libtool
autoreconf: running: /usr/bin/autoconf
...
configure.ac:41: error: possibly undefined macro: AC_PROG_LIBTOOL
If this token and others are legitimate, please use m4_pattern_allow.
See the Autoconf documentation.
Я смог устранить проблему, установив libtool
ее с помощью apt.
sudo apt-get update
sudo apt-get install libtool
Ответ №3:
Я столкнулся с подобной проблемой, и для ее решения я удалил установленный пакет yum и установил его с помощью dnf, как показано ниже
$yum remove automake
$dnf install automake
Ответ №4:
Когда я печатаю ./autogen.sh,произошла какая-то ошибка.
Целью проектирования автоинструментов является то, что они не являются частью обычных сборок. Автоматические модули используются для построения системы сборки, которая является обязанностью сопровождающего пакета. Люди, которые просто хотят создать проект, не должны (в соответствии с философией Autotools) вообще вызывать автоматические модули-вместо этого они должны использовать уже предоставленную им систему сборки, состоящую из configure
скрипта, шаблонов файлов и заголовков и т. Д..
Таким образом, первое, что нужно попробовать, всегда должно заключаться в том, чтобы распаковать чистую копию дистрибутива и , не запуская autogen.sh
, autoreconf
или аналогично, выполнить стандартную configure; make; make install
последовательность. В этом случае автоинструменты не должны даже устанавливаться на хосте сборки. Только в том случае, если существующую систему сборки необходимо изменить для вашей среды или если она вообще не предусмотрена, вам следует изучить (повторно)создание системы сборки.
Если вам действительно нужно перестроить систему сборки-что не так уж редко, как хотелось бы GNU, — то самый простой способ продвижения вперед-использовать те же версии автоинструментов, которые используют разработчики пакетов. Более поздние версии часто являются жизнеспособной заменой, в какой-то степени, но иногда они требуют корректировки входных данных Autotools. Более старые версии могут быть проблематичными. Однако вы должны хорошо понимать, что это ставит вас в роль сопровождающего пакета, а не простого разработчика пакетов. Перестройка системы сборки открывает перед вами необходимость решения проблем, характерных для этого предприятия.
Иногда проблемы совместимости версий могут быть частично или полностью решены путем указания автоматическим пулам заменить сценарии и локальные макросы m4, которые они устанавливают в исходное дерево проекта. Если проект предоставляет autogen.sh
, он может сделать это, а может и не сделать. Команда autoreconf --install --force
, выполняемая из корня исходного дерева, позаботится обо всех этих элементах автоматического управления, но может не выполнять другие действия, которые autogen.sh
выполняет. Вероятно, вам стоит потратить время , чтобы проверить, что делает ваш конкретный autogen.sh
, и может быть полезно запустить оба autoreconf
и autogen.sh
, вероятно, в таком порядке.
Я думаю, что, возможно, файл .bashrc неправильный
Маловероятно, что конкретное сообщение об ошибке, которое вы представили, отражает проблему с конфигурацией вашей среды. Это может отражать проблему с вашими локальными автоинструментами DIY-более вероятно, Libtool, чем другие, — но есть большая вероятность, что это отражает несовместимость между версиями автоинструментов, используемыми сопровождающими пакета, и теми, которые вы создали.