Autoconf, Libtool i niezdefiniowany AC_PROG_LIBTOOL

17

Próbuję zbudować bibliotekę, a instrukcje README mają wywołać config.ac, a następnie zrobić.

Niestety wystąpił błąd:

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

Teraz wiem, że mam zainstalowaną bibliotekę libtool (używam Scientific Linux 6.2 (niezaktualizowany) i użyłem yum - downloadonly, aby na wszelki wypadek uzyskać rpms automake, autoconf, libtool i libtool-devel).

Są zainstalowane, a libtool obecnie mieszka w / usr / share / libtool. Jednak autoconf nie może go znaleźć.

Wszystkie wyniki Google były typu „zainstaluj libtool”, co wcale mi nie pomaga. Każda pomoc lub wskazówki byłyby bardzo mile widziane. Nie jestem pewien, czy problem polega na tym, że rpm -i spieprzył się, żeby uzyskać libtool tutaj, czy też muszę połączyć / usr / share / libtool z innym miejscem (więc który i wszystko inne może go znaleźć).

użytkownik2093082
źródło

Odpowiedzi:

11

Nie byłem usatysfakcjonowany wszystkimi odpowiedziami „po prostu reinstaluj”, które znalazłem w Internecie na różnych forach, więc postanowiłem rozwiązać ten problem bez instalowania libtoola bez dystrybucji. (Korzystam z CentOS 7.)

Żarówka nad moją głową zaświeciła się, gdy przeczytałem https://www.gnu.org/software/automake/manual/html_node/Macro-Search-Path.html . Ścieżka wyszukiwania używana do znajdowania plików makr to ta zdefiniowana przez --prefix, która zazwyczaj jest domyślnie /usr/local. Więc autoconf dla pakietu, który zostanie zainstalowany do /usr/localwyszukiwania /usr/local/share/aclocal-APIVERSIONi /usr/local/share/aclocal.

W wielu dystrybucjach, w tym w CentOS7, siedem plików makr dla libtoolsjest instalowanych pod, /usr/share/aclocala nie pod /usr/local/share/aclocal. W związku z tym nie można ich znaleźć, gdy pakiet, który budujesz, ustawia prefiks /usr/local.

Aby to naprawić, jeśli masz już /usr/local/share/aclocalkatalog, wpisz następujące polecenie jako 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

Aby to naprawić, jeśli nie masz /usr/local/share/aclocalkatalogu, wpisz następujące polecenie jako root:

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

Voilà - problem rozwiązany.

Steve Wolf
źródło
Świetna wskazówka, mniej więcej naprawiłem ten (upokarzający, uporczywy) problem dla mnie w klastrze CentOS 7. Jeśli projekt jest dostarczany z autogen.sh, możesz również zmodyfikować exec autoreconflinię, aby uwzględnić -I /usr/share/alocalrazem z innymi opcjami, co właśnie zrobiłem. Właściwe polecenie wywołane w celu wygenerowania configureskryptu to wtedy autoreconf -v -f -i -I /usr/share/aclocal.
TheDudeAbides,
11

musisz zainstalować libtool

w ubuntu:

sudo apt-get install libtool

w oparciu o redhat:

yum install libtool
haw3d
źródło
5
Pytanie brzmiało już: to nie jest problem.
Kevin Panko
9

Zainstalowałem także libtool i inne w niestandardowych katalogach, a tym błędem jest to, że autoconf nie jest w stanie znaleźć makr m4 libtool. Tak, może to być spowodowane tym, że libtool nie jest zainstalowany, ale także dlatego, że znajduje się w niestandardowym katalogu instalacyjnym. Oto moja poprawka:

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

które umieściłem w moim .bash_profile

Dan Ibanez
źródło
2
Innym sposobem na to: autoreconf -I $ HOME / install / libtool / share / aclocal
Moraru Lilian
1

Musisz go ponownie zainstalować , aby naprawić błąd, więc wykonaj następujące kroki:

1] Usuń bieżący libtool, jeśli jest zainstalowany: sudo apt-get purge libtool

2] Pobierz z oficjalnej strony https://www.gnu.org/software/libtool/

3] Rozpakuj: tar -xzvf "name of the tar_file"

4] Wprowadź folder i wpisz: ./configure && make

5] Zainstaluj: sudo make install

I gotowe, błąd powinien zostać naprawiony!

Użytkownik 1911
źródło
0
configure.ac:75 :error: possibly undefined macro: AC_PROG_LIBTOOL
    If this token is legitimate please use m4_pattern_allow

Teraz wiem, że mam zainstalowane libtool ...

Zauważyłem, że zwykle oznacza to, że nie masz libtoolzainstalowanego sprzętu programistycznego (chociaż możesz mieć libtoolzainstalowany).

Powinieneś zainstalować libltdl-devna Debianie i Ubuntu; i libtool-ltdl-develna Fedorze.


Oto wyszukiwania pakietów.

Fedora

$ 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
...
jww
źródło