prawdopodobnie niezdefiniowane makro: AC_MSG_ERROR


113

W configure.ac mam następujące elementy:

AC_CHECK_PROGS(MAKE,$MAKE make gmake,error)
if test "x$MAKE" = "xerror" ;then
  AC_MSG_ERROR([cannot find a make command])
fi

To było w naszym projekcie od dłuższego czasu, ale w niektórych konfiguracjach pojawia się ten błąd:

configure.ac:45: error: possibly undefined macro: AC_MSG_ERROR
  If this token and others are legitimate, please use m4_pattern_allow.
  See the Autoconf documentation.

Linie, które zostały ostatnio dodane powyżej:

AC_CONFIG_MACRO_DIR([m4])
LT_INIT

Czy ktoś może wyjaśnić, co powoduje ten błąd i jak wyśledzić problem?

EDYCJA: Dodawanie szczegółów dotyczących różnic.

Pudełko, które działa:

uname -a Linux host1 2.6.38-13-generic #53-Ubuntu SMP Mon Nov 28 19:33:45 UTC 2011 x86_64 x86_64 x86_64 GNU/Linux

automake: 1.11.1
autoconf: 2.67
m4: 1.4.14
libtoolize: 2.2.6b

Pudełko, które nie działa:

Linux host2 2.6.32-35-generic-pae #78-Ubuntu SMP Tue Oct 11 17:01:12 UTC 2011 i686 GNU/Linux

automake: 1.11.1
autoconf: 2.65
m4: 1.4.13
libtoolize: 2.2.6b

NOWA EDYCJA: tylko komputery 32-bitowe mają tę trudność.

Zaktualizowany jestem w stanie odtworzyć problemu na maszynie z CentOS autoconf 2.67, automake 1.11.1, libtool 2.2.6b, i m4 1.4.14. Czy to tylko błąd dotyczący komputerów 32-bitowych?


Dlaczego to jest problem? Zbuduj swoje tarballe za pomocą autoconf 2.67. Wystarczy, że zainstalujesz autoconf na jednym komputerze!
William Pursell

1
Wiem, że mogę łatwo obejść ten problem, po prostu staram się upewnić, że jest to problem z jednym pudełkiem, a nie problemem w naszym configure.ac lub innych plikach konfiguracyjnych.
dbeer

Wiem, że autoconf 2.64 został uznany za dość wadliwy. Prawdopodobnie masz błąd w wersji 2.65.
William Pursell

1
Jestem w stanie odtworzyć problem na innej 32-bitowej maszynie z autoconf 2.67, automake 1.11.1, libtool 2.2.6b i m4 1.4.14
dbeer

1
Nie wyobrażam sobie takiej pomocy: ale czy wypróbowałeś AC_CHECK_PROGS ([MAKE], [$ MAKE make gmake], [błąd])? Zdecydowanie brzmi to jak problem z m4, a pełne cytowanie rzeczy do m4 może tylko pomóc. Ten konkretny wiersz prawdopodobnie nie jest winowajcą, ale gdzieś pachnie jak kwestia cytowania. Czy możesz opublikować pełny plik configure.ac?
William Pursell

Odpowiedzi:


256

Miałem ten sam problem i stwierdziłem, że pkg-configbrakuje tego pakietu.

Po zainstalowaniu pakietu wszystko zostało wygenerowane poprawnie.


2
Dzięki! Przedstawiam moją sprawę dla następnego faceta w tych samych butach. Aby mieć powtarzalne kompilacje, muszę użyć zestawu niestandardowych ścieżek do wszystkich narzędzi systemu budowania GNU. Odpowiednikiem instalacji pkg-config było nie tylko zmodyfikowanie PATH, ale także dodanie "-I /toolchain_local/pkg-config-0.23/share/aclocal"do autoreconfwiersza poleceń. Zajęło mi trochę czasu, zanim zdałem sobie sprawę, że pkg-config nie instaluje tylko plików binarnych. rpm -ql pkgconfigpomógł.
Assambar

7
Musiałem zainstalować libtool.
Mitar

11
Po prostu do Twojej wiadomości, technicznie rzecz biorąc, to nie rozwiązuje problemu. W tym przypadku program AC_MSG_ERRORpróbował powiedzieć „musisz zainstalować pkg-config”, ale z jakiegoś powodu nie mógł wydrukować tego komunikatu (podając błąd o AC_MSG_ERROR). Po zainstalowaniu pkg-confignie było już potrzeby drukowania komunikatu o błędzie, więc AC_MSG_ERRORwiersz został pominięty i wszystko działa. W porządku, jeśli instalujesz pakiet innej osoby, ale jeśli jest to twój własny kod, nadal nie rozwiązałeś problemu :-)
Malvineous

19
Napotkałem ten problem już wcześniej i zainstalowanie autoconf-archivepakietu rozwiązało problem.
jonthalpy

5
Wow, to jest przykład autorekonfiguracji wypluwający naprawdę zły komunikat o błędzie.
John Greene,

31

Zaleca się używanie autoreconf -fizamiast ręcznego wywoływania, aclocal;autoconf;automake; #and whatever elseaby poprawnie wypełnić plik aclocal.m4 i tak dalej.

Dodanie ACLOCAL_AMFLAGS = -I m4(do najwyższego poziomu Makefile.am) i AC_CONFIG_MACRO_DIR([m4])obecnie jest nadal opcjonalne, jeśli nie używasz własnych plików m4, ale oczywiście wycisza proces :)


Mamy pliki m4, więc jest to dla nas wymagane. Również zmiana rzeczy na autoreconf -fi powoduje ten sam błąd.
dbeer

1
Jeśli masz pliki m4, ACLOCAL_AMFLAGS i AC_CONFIG_MACRO_DIR są dokładnie tym, co powinieneś zrobić. (I umieszczanie plików w m4 /, odpowiednio w katalogu, który podałeś)
jørgensen

Dzięki, autoreconf -fiskompilowałem PCRE.
uınbɐɥs

Miałem dokładnie ten sam problem i okazało się, że ja przegapiłem ustawienie ACLOCAL_AMFLAGSw Makefile.am- dzięki!
simpleigh

2
Autotools są tak zepsute ... Żadne z tych bzdur nie ma sensu. Jak to możliwe, że za 30 lat sprawy są nadal tak zepsute?
jww

27

Miałem ten problem z własnym configure.ac, ale w tym przypadku (i dla dobra każdego z Google) wynikało to z tego, że przypadkowo zacytowałem AC_MSG_ERRORznak, więc był traktowany jako ciąg:

AX_BOOST_BASE([1.42], [], [AC_MSG_ERROR([Could not find Boost])])

Po usunięciu nawiasów kwadratowych wokół AC_MSG_ERRORmakra zadziałało:

AX_BOOST_BASE([1.42], [], AC_MSG_ERROR([Could not find Boost]))

Te komentarze mówiące, że powinieneś zainstalować pkg-configlub jakiś pakiet, nie mają sensu. AC_MSG_ERRORMa pracy i daje pomocne wiadomości jak „Musisz zainstalować pakiet XYZ”, ale z powodu jakiegoś problemu, AC_MSG_ERRORnie działa. Zainstalowanie pakietu XYZ z pewnością usunie błąd, ale tylko dlatego, że gdy pakiet już się pojawi, nie ma już potrzeby drukowania komunikatu o błędzie!

Tak więc instalacja pkg-configlub konkretny pakiet po prostu omija problem, a tak naprawdę go nie rozwiązuje.


12

ja też miałem podobny problem .. moim rozwiązaniem jest

apt-get install libcurl4-openssl-dev

(miałem już zainstalowane libcurl) działało przynajmniej dla mnie ..


11

Doświadczyłem tego samego problemu pod CentOS 7

W takim przypadku problem zniknął po instalacji libcurl-devel( libcurlbył już zainstalowany na tym komputerze)


6

Miałem ten sam problem na RHEL7.5 z otto-de / libvmod-uuid

Zostało to naprawione poprzez zainstalowanie pakietów „autoconf-archive”


Potrzebowałem pakietu Debiana "autoconf-archive", aby zbudować powertop v2,31-rc1.
dileks

3

Czy konfigurujesz lokalny m4katalog „ ”? na przykład,

> aclocal -I m4 --install

Niektóre pakiety zawierają skrypt powłoki autogen.shlub initgen.shdo uruchamiania programów glibtoolize, autoheader, autoconf, automake. Oto autogen.shskrypt, którego używam:

#! /bin/sh

case `uname` in Darwin*) glibtoolize --copy ;;
  *) libtoolize --copy ;; esac

autoheader
aclocal -I m4 --install
autoconf

automake --foreign --add-missing --force-missing --copy

EDYTOWAĆ

Konieczne może być dodanie ACLOCAL_AMFLAGS = -I m4do najwyższego poziomu Makefile.am.


Czy autoreconf nie wybiera odpowiedniego libtoolize na Darwinie?
William Pursell

Konfiguruję lokalny katalog „m4”. Dodałem -I m4 --install do aclocal, ale pojawia się ten sam błąd. To jest mój skrypt autogen.sh: libtoolize -c -f autoheader -f aclocal -I m4 --install autoconf -f automake --foreign --add-missing --force-missing --copy
dbeer

1
@dbeer, dodał ACLOCAL_AMFLAGSzmienną?
Brett Hale

@WilliamPursell nie, tak nie jest. MacOS zawiera bibliotekę GNU libtool jako „glibtool”, a dostarczoną przez Apple (która nie zachowuje się tak, jak oczekuje się od biblioteki GNU) jako „libtool”. Zauważ, że również libtoolize jest instalowane jako 'glibtoolize'. Można to zmienić, określając makro LIBTOOLIZE i LIBTOOL. Pomimo tego, że ta próbka autogenu jest dobra, często lepiej jest po prostu uruchomić autoreconf -fi i pozwolić mu zgadnąć / odzyskać flagę -I z poprzedniego uruchomienia, zwłaszcza gdy oprogramowanie nie jest twoje.
LeoTh3o

3

Dla Debiana. Wymagane pakiety to: m4 automake pkg-config libtool


2

Błąd jest generowany przez autom4te. Jeśli wszystko jest skonfigurowane poprawnie, część kodu, która generuje ten błąd, nigdy nie powinna widzieć „AC_MSG_ERROR”, ponieważ przed tym punktem powinna zostać rozszerzona o m4. Mówisz, że błąd występuje tylko „w niektórych konfiguracjach”. Sugerowałbym, że w tych konfiguracjach twoja instalacja autoconf jest fubar. Prawdopodobnie masz zainstalowaną niekompatybilną wersję m4.


Jestem na autoconf 2.65 i m4 1.4.13. Czy są one zgodne?
dbeer

m4 1.4.13 jest wystarczająco nowy i raczej nie stanowi problemu. Czy możesz określić, co różni się w konfiguracjach, w których widzisz ostrzeżenie, od tych, w których go nie widzisz?
William Pursell

Właśnie dodałem część informacji na ten temat do mojego pytania - czy możesz wymyślić coś jeszcze istotnego? Nie mam zbyt dużej wiedzy, jeśli chodzi o automatyczne narzędzia.
dbeer

Właśnie zauważyłem - maszyny 32-bitowe wydają się być tymi, które mają trudności.
dbeer

2

Korzystanie z MacOS X

sudo port install pkgconfig

było rozwiązaniem!


3
ta odpowiedź jest nieaktualna, użyj naparu zamiast portu
xiamx

2

Na Mac OS X el captain with brew, spróbuj:
brew install pkgconfig

To zadziałało dla mnie.


2

Istnieją dwie możliwe przyczyny tego problemu:

  1. nie zainstalował aclocal.
    rozwiązanie : zainstaluj libtool

    • Dla ubuntu: sudo apt-get install libtool
    • Dla centów: sudo yum install libtool
  2. ścieżka do LIBTOOL.m4 to błąd.
    rozwiązanie:

    1. użyj aclocal --print-ac-dirdo sprawdzenia bieżącej ścieżki do aclocal (zwykle powinno to być „/ usr / share / aclocal” lub „/ usr / share / aclocal”)
    2. Następnie sprawdź, czy są pliki * .m4.
    3. Jeśli nie, cp odpowiadające plikom * .m4 do tej ścieżki (może cp /usr/share/aclocal/*.m4 /usr/local/share/aclocal/lub cp /usr/local/share/aclocal/*.m4 /usr/share/aclocal/)

Mam nadzieję, że to pomoże


1

Miałem ten sam problem na Ubuntu ( error: possibly undefined macro: AC_MSG_ERROR), ale powyższe odpowiedzi nie działały. Tutaj znalazłem rozwiązanie

To załatwiło sprawę:

$ LANG=C LC_CTYPE=C ./autogen.sh

1

Mój problem został rozwiązany po zainstalowaniu pkg-config na Macu (napisz instalację pkg-config)



0

Zdarzyło mi się to, gdy zapomniałem a w argumentach dla lokalnie zdefiniowanego makra. Spędziłem godziny, próbując to rozgryźć (ledwo zaznajomiony z automatycznymi narzędziami) ...

AC_CHECK_MACRO([Foo]
    AC_LOCAL_DO([......

powinien był być

AC_CHECK_MACRO([Foo],      # <-- Notice comma, doh!
    AC_LOCAL_DO([......

Wygląda na to, że powinien spowodować błąd lub coś podobnego, ale przypuszczam, że będąc makroprocesorem, może robić tylko to, co mu każą.


0

Właśnie straciłem na tym kilka godzin. Mój wniosek:

  • W zależności od wersji i innych warunków lokalnych, autoconf wypluje komunikat o niezdefiniowanym AC_MSG_ERROR, gdy napotka JAKIEKOLWIEK niezdefiniowane makro . AC_MSG_ERROR to czerwony śledź. Przyczyny niezdefiniowanego makra mogą być następujące:
    • Literówka w nazwie makra w pliku lub lokalne makro, które nie zostało dostarczone z paczką
    • Brak pakietu, który zawierałby zestaw makr autoconf, z których jedno jest używane w pliku. Często brakuje pakietu pkg-config (z powodu np. PKG_CHECK_MODULES), ale może to być dowolny inny pakiet dostarczający potrzebne, ale nieobecne makro. Błędne jest oczywiście to, że dzieje się to zanim wciąż nieistniejący skrypt konfiguracyjny może sprawdzić brakujący pakiet ...

0

Miałem podobne problemy, gdy próbowałem zbudować amtk i utthpmock za pomocą jhbuild.

Musiałem zainstalować najnowszą wersję autoconf-archive. Instrukcje znajdują się pod adresem https://github.com/autoconf-archive/autoconf-archive/blob/master/README-maint . Na sudo make installkoniec zrobiłem dodatkowe .

Ostatnim krokiem była aktualizacja mojego ACLOCAL_PATH:

echo 'export ACLOCAL_PATH=$ACLOCAL_PATH:/usr/local/share/aclocal' >> ~/.bashrc

Po a source ~/.bashrcwszystkie makra zostały w końcu znalezione i kompilacja się powiodła.


-1

Miałem ten sam problem z portem Macports „openocd” (lokalnie zmodyfikował Portfile, aby korzystał z repozytorium git) na świeżo zainstalowanej maszynie.

Trwała poprawka jest łatwa, zdefiniuj zależność do pkgconfig w Portfile: depend_lib-append port: pkgconfig

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.