Autoconf, Libtool и неопределенный AC_PROG_LIBTOOL


17

Я пытаюсь собрать библиотеку, и инструкции README должны вызвать configure.ac, а затем make.

К сожалению, я сталкиваюсь с ошибкой:

configure.ac:75 :error: possibly undefined macro: AC_PROG_LIBTOOL
    If this token is legitimate please use m4_pattern_allow

Теперь я знаю, что у меня установлен libtool (я использую Scientific Linux 6.2 (без обновления) и использовал yum --downloadonly для получения rpms от automake, autoconf, libtool и libtool-devel на всякий случай).

Они установлены, и в настоящее время libtool находится в / usr / share / libtool. Однако autoconf не может его найти.

Все результаты Google были типа «установить libtool», что мне совсем не помогло. Любая помощь или руководство будут очень признательны. Я не уверен, что проблема в том, что rpm -i облажался с получением libtool здесь, или если мне нужно связать / usr / share / libtool где-то еще (так, чтобы кто-нибудь еще мог найти его).

Ответы:


11

Я не был удовлетворен всеми «просто переустановленными» ответами, которые я нашел по всему Интернету на различных форумах, поэтому был полон решимости решить эту проблему, не устанавливая не дистрибутив libtool. (Я работаю на CentOS 7.)

Когда я прочитал https://www.gnu.org/software/automake/manual/html_node/Macro-Search-Path.html, лампочка над моей головой загорелась . Путь поиска, используемый для поиска файлов макроса, определяется путем --prefix, который по умолчанию обычно используется /usr/local. Так что autoconf для пакета, который будет установлен для /usr/localпоиска /usr/local/share/aclocal-APIVERSIONи /usr/local/share/aclocal.

Во многих дистрибутивах, в том числе CentOS7, семь макрофайлов для libtoolsустанавливаются под, /usr/share/aclocalа не под /usr/local/share/aclocal. Следовательно, они не найдены, когда пакет, который вы собираете, устанавливает префикс /usr/local.

Чтобы это исправить, если у вас уже есть /usr/local/share/aclocalкаталог, введите в качестве пользователя root:

for file in argz libtool ltdl ltoptions ltsugar ltversion lt~obsolete
do
  ln -s /usr/share/aclocal/$file.m4 /usr/local/share/aclocal/$file.m4
done

Чтобы это исправить, если у вас нет /usr/local/share/aclocalкаталога, введите в качестве пользователя root:

ln -s /usr/share/aclocal /usr/local/share/aclocal

Вуаля - проблема решена.


Отличный совет, более-менее исправил эту (постоянную) проблему для меня на кластере CentOS 7. Если проект поставляется с, autogen.shвы также можете изменить exec autoreconfстроку, чтобы включить -I /usr/share/alocalвместе с другими параметрами, что я и сделал. Фактическая команда, вызванная для генерации configureскрипта, - это тогда autoreconf -v -f -i -I /usr/share/aclocal.
TheDudeAbides

11

вы должны установить libtool

в убунту:

sudo apt-get install libtool

в основе redhat:

yum install libtool

5
Вопрос уже сказал, что это не проблема.
Кевин Панко

9

Я также установил libtool и другие файлы в нестандартные каталоги, и эта ошибка на самом деле означает, что autoconf не может найти макросы libtool m4. Да, это может быть вызвано не установкой libtool, но и тем, что он находится в нестандартном каталоге установки. Вот мое исправление:

export ACLOCAL_PATH=$HOME/install/libtool/share/aclocal:$ACLOCAL_PATH

который я поместил в свой .bash_profile


2
Еще один способ сделать это: autoreconf -I $ HOME / install / libtool / share / aclocal
Морару Лилиан

1

Вам необходимо переустановить его, чтобы исправить ошибку, поэтому выполните следующие действия:

1] Удалить текущий libtool, если он установлен: sudo apt-get purge libtool

2] Загрузите его с официального сайта https://www.gnu.org/software/libtool/

3] Распакуйте его: tar -xzvf "name of the tar_file"

4] Введите папку и введите: ./configure && make

5] Установите это: sudo make install

И все готово, ошибка должна быть исправлена!


0
configure.ac:75 :error: possibly undefined macro: AC_PROG_LIBTOOL
    If this token is legitimate please use m4_pattern_allow

Теперь я знаю, что у меня установлен libtool ...

Я обнаружил, что это обычно означает, что у вас не установлено оборудование для libtoolразработки (хотя вы, возможно, и libtoolустановили).

Вы должны установить libltdl-devна Debian и Ubuntu; и libtool-ltdl-develна федоре.


Вот поиски пакетов.

мягкая фетровая шляпа

$ yum search libtool
======================== Name Exactly Matched: libtool =========================
libtool.x86_64 : The GNU Portable Library Tool
======================= Summary & Name Matched: libtool ========================
libtool-ltdl.x86_64 : Runtime libraries for GNU Libtool Dynamic Module Loader
libtool-ltdl.i686 : Runtime libraries for GNU Libtool Dynamic Module Loader
libtool-ltdl-devel.x86_64 : Tools needed for development using the GNU Libtool
                          : Dynamic Module Loader
libtool-ltdl-devel.i686 : Tools needed for development using the GNU Libtool
                        : Dynamic Module Loader
=========================== Summary Matched: libtool ===========================
mingw32-libltdl.noarch : Runtime libraries for GNU Libtool Dynamic Module Loader
mingw64-libltdl.noarch : Runtime libraries for GNU Libtool Dynamic Module Loader

Ubuntu

$ apt-cache search libtool
autotools-dev - Update infrastructure for config.{guess,sub} files
libltdl-dev - System independent dlopen wrapper for GNU libtool
libltdl7 - System independent dlopen wrapper for GNU libtool
libtool - Generic library support script
libtool-bin - Generic library support script (libtool binary)
libtool-doc - Generic library support script
...
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.