возможно неопределенный макрос: AC_MSG_ERROR


113

У меня в configure.ac есть следующее:

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

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

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.

Строки, которые были недавно добавлены над этим:

AC_CONFIG_MACRO_DIR([m4])
LT_INIT

Может ли кто-нибудь объяснить, что вызывает эту ошибку и как отследить проблему?

РЕДАКТИРОВАТЬ: добавление деталей о различиях.

Коробка, которая работает:

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

Коробка, которая не работает:

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

НОВОЕ РЕДАКТИРОВАНИЕ: только 32-битные машины испытывают эту трудность.

ОБНОВЛЕНО Я могу воспроизвести проблему на машине CentOS с autoconf 2.67, automake 1.11.1, libtool 2.2.6bи m4 1.4.14. Это просто ошибка 32-битных машин?


Почему это проблема? Создайте свои архивы с помощью autoconf 2.67. Вам нужно установить autoconf только на одном компьютере!
Уильям Перселл

1
Я знаю, что могу легко обойти проблему, я просто пытаюсь убедиться, что это проблема с одним ящиком, а не проблема в нашем configure.ac или других файлах конфигурации.
dbeer

Я знаю, что autoconf 2.64 считался довольно глючным. Возможно, вы столкнулись с ошибкой в ​​2.65.
Уильям Перселл,

1
Я могу воспроизвести проблему на другом 32-битном компьютере с autoconf 2.67, automake 1.11.1, libtool 2.2.6b и m4 1.4.14
dbeer

1
Я не могу себе представить, как это поможет: но пробовали ли вы AC_CHECK_PROGS ([MAKE], [$ MAKE make gmake], [error])? Это определенно звучит как проблема с m4, и полное цитирование m4 может только помочь. Эта конкретная строка, вероятно, не виновата, но где-то пахнет проблемой цитирования. Можете выложить полную версию configure.ac?
Уильям Перселл

Ответы:


257

У меня была такая же проблема, и я обнаружил, что этот pkg-configпакет отсутствует.

После установки пакета все сгенерировалось правильно.


2
Спасибо! Обрисовываю мой случай для следующего парня в той же обуви. Чтобы получить воспроизводимые сборки, я должен использовать цепочку настраиваемых путей ко всем инструментам GNU Build System. Эквивалент установки pkg-config заключался не только в изменении PATH, но и в добавлении "-I /toolchain_local/pkg-config-0.23/share/aclocal"в autoreconfкомандную строку. Мне потребовалось некоторое время, чтобы понять, что pkg-config не устанавливает только двоичные файлы. rpm -ql pkgconfigпомог.
Assambar

7
Пришлось установить libtool.
Митар

11
Просто, к вашему сведению, технически это не решает проблему. В этом случае AC_MSG_ERRORон пытался сказать «вам нужно установить pkg-config», но по какой-то причине он не смог распечатать это сообщение (с сообщением об ошибке AC_MSG_ERROR). После установки pkg-configбольше не нужно было печатать сообщение об ошибке, поэтому AC_MSG_ERRORстрока была пропущена, и все заработало. Хорошо, если вы устанавливаете чужой пакет, но если это ваш собственный код, вы все еще не
устранили

19
Я сталкивался с этой проблемой раньше, и установка autoconf-archiveпакета устранила проблему.
jonthalpy

5
Вау, это пример автопереконфигурации, выдающей действительно плохое сообщение об ошибке.
Джон Грин

31

Рекомендуется использовать autoreconf -fiвместо ручного вызова aclocal;autoconf;automake; #and whatever elseдля правильного заполнения aclocal.m4 и так далее.

Добавление ACLOCAL_AMFLAGS = -I m4(в Makefile.am верхнего уровня) и AC_CONFIG_MACRO_DIR([m4])в настоящее время по-прежнему необязательно, если вы не используете какие-либо собственные файлы m4, но, конечно же, это отключит процесс :)


У нас есть файлы m4, так что они нам необходимы. Кроме того, изменение параметров на autoreconf -fi вызывает ту же ошибку.
dbeer

1
Если у вас есть файлы m4, вам следует делать ACLOCAL_AMFLAGS и AC_CONFIG_MACRO_DIR. (И помещаем файлы в m4 /, соответственно в указанный вами
каталог

Спасибо, autoreconf -fiсделал компиляцию PCRE.
uınbɐɥs

У меня была точно такая же проблема и обнаружил , что я пропустил настройки ACLOCAL_AMFLAGSв Makefile.am- спасибо!
simpleigh 06

2
Автоинструменты так ломаются ... В этой хрени нет смысла. Как может быть, что через 30 лет все еще так сломано?
jww 04

27

У меня была эта проблема с моей собственной configure.ac, но в этом случае (и для пользы всех здесь из Google) это было потому, что я случайно процитировал, AC_MSG_ERRORпоэтому он обрабатывался как строка:

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

Как только я удалил квадратные скобки вокруг AC_MSG_ERRORмакроса, он заработал:

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

Те комментарии, в которых говорится, что вы должны установить pkg-configили какой-то пакет, не имеют значения. AC_MSG_ERRORДолжен работать и дать вам полезные сообщения , как «Вам необходимо установить пакет XYZ», но из - за какой - то проблемы, AC_MSG_ERRORне работает. Установка пакета XYZ, безусловно, устранит ошибку, но только потому, что после того, как пакет будет там, отпадет необходимость печатать сообщение об ошибке!

Таким образом, установка pkg-configопределенного пакета просто позволяет обойти проблему, но на самом деле ее не исправить.


12

у меня тоже была похожая проблема .. мое решение -

apt-get install libcurl4-openssl-dev

(у меня уже была установлена ​​libcurl), по крайней мере, у меня сработало ..


11

Я испытал ту же проблему в CentOS 7

В некоторых случаях проблема исчезла после установки libcurl-devel( libcurlуже была установлена ​​на этом компьютере)


6

У меня была такая же проблема на RHEL7.5 с otto-de / libvmod-uuid

Исправлено установкой пакетов "autoconf-archive"


Мне нужен пакет Debian "autoconf-archive" для сборки powertop v2,31-rc1.
дилекс

3

Вы настраиваете локальный m4каталог? например,

> aclocal -I m4 --install

Некоторые пакеты содержат сценарий оболочки autogen.shили initgen.shдля запуска glibtoolize, autoheader, autoconf, automake. Вот autogen.shсценарий, который я использую:

#! /bin/sh

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

autoheader
aclocal -I m4 --install
autoconf

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

РЕДАКТИРОВАТЬ

Возможно, вам понадобится добавить ACLOCAL_AMFLAGS = -I m4на верхний уровень Makefile.am.


Autoreconf не выбирает правильный libtoolize на Дарвине?
Уильям Перселл

Я настраиваю локальный каталог m4. Я добавил -I m4 --install в aclocal, но получаю ту же ошибку. Это мой сценарий autogen.sh: libtoolize -c -f autoheader -f aclocal -I m4 --install autoconf -f automake --foreign --add-missing --force-missing --copy
dbeer

1
@dbeer, добавили ACLOCAL_AMFLAGSпеременную?
Brett Hale

@WilliamPursell нет, это не так. MacOS имеет GNU libtool как 'glibtool', а тот, который предоставляется Apple (который ведет себя не так, как ожидается от GNU libtool) как 'libtool'. Обратите внимание, что libtoolize также устанавливается как glibtoolize. Это можно изменить, указав LIBTOOLIZE и макрос LIBTOOL. Несмотря на то, что этот образец автогена хорош, часто лучше просто запустить autoreconf -fi и позволить ему угадать / восстановить флаг -I из предыдущего запуска, особенно когда программное обеспечение не ваше.
LeoTh3o 02


2

Ошибка генерируется autom4te. Если все настроено правильно, часть кода, которая генерирует эту ошибку, никогда не должна видеть «AC_MSG_ERROR», потому что она должна была быть расширена m4 до этого момента. Вы говорите, что ошибка возникает только «в некоторых настройках». Я бы предположил, что в этих настройках ваша установка autoconf будет fubar. Возможно, у вас установлена ​​несовместимая версия m4.


Я использую autoconf 2.65 и m4 1.4.13. Совместимы ли они?
dbeer

m4 1.4.13 достаточно новый и вряд ли проблема. Можете ли вы определить, чем отличаются настройки, в которых вы видите предупреждение, от тех, в которых вы его не видите?
Уильям Перселл

Я просто добавил некоторую информацию по этому поводу к своему вопросу - вы можете придумать что-нибудь еще относящееся к делу? Я не очень разбираюсь в автоинструментах.
dbeer

Только что заметил - 32-битные машины кажутся сложными.
dbeer


2

В Mac OS X el captain with brew попробуйте:
brew install pkgconfig

Это сработало для меня.


2

У этой проблемы две возможные причины:

  1. aclocal не устанавливал.
    решение : установить libtool

    • Для Ubuntu: sudo apt-get install libtool
    • Для centos: sudo yum install libtool
  2. путь к LIBTOOL.m4 является ошибочным.
    решение:

    1. использовать aclocal --print-ac-dir для проверки текущего пути к aclocal (обычно это должно быть "/ usr / share / aclocal" или "/ usr / share / aclocal")
    2. Затем проверьте, есть ли файлы * .m4.
    3. Если нет, cp соответствующие файлы * .m4 по этому пути. (Может быть, cp /usr/share/aclocal/*.m4 /usr/local/share/aclocal/или cp /usr/local/share/aclocal/*.m4 /usr/share/aclocal/)

Надеюсь, поможет


1

У меня была такая же проблема с Ubuntu ( error: possibly undefined macro: AC_MSG_ERROR), но ответы выше не помогли мне. Я нашел решение здесь

Это помогло:

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



0

Это случилось со мной, когда я забыл в аргументах для локально определенного макроса. Потратил часы, пытаясь разобраться (с автоинструментами почти не знаком) ...

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

должно было

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

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


0

Я только что потерял несколько часов на этом. Мой вывод:

  • В зависимости от версии и любых других локальных условий autoconf выдаст сообщение об AC_MSG_ERROR undefined, когда встретит ЛЮБОЙ неопределенный макрос. . AC_MSG_ERROR - отвлекающий маневр. Причины для неопределенного макроса могут быть:
    • Опечатка в имени макроса в файле или локальный макрос, который не был поставлен с архивом.
    • Отсутствует пакет, в котором должен был бы быть набор макросов autoconf, один из которых используется в файле. pkg-config часто отсутствует (например, из-за PKG_CHECK_MODULES), но это может быть любой другой пакет, предоставляющий необходимый, но отсутствующий макрос. Порочность, конечно же, заключается в том, что это происходит до того, как еще не существующий скрипт настройки сможет проверить отсутствие пакета ...

0

У меня были аналогичные проблемы при попытке создать amtk и utthpmock с помощью jhbuild.

Мне нужно было установить самую последнюю версию autoconf-archive. Инструкции находятся на https://github.com/autoconf-archive/autoconf-archive/blob/master/README-maint . В sudo make installконце сделал доп .

Последним шагом было обновить мои ACLOCAL_PATH:

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

После a source ~/.bashrcвсе макросы были наконец найдены, и сборки прошли успешно.


-1

У меня была такая же проблема с портом Macports "openocd" (локально измененный файл порта для использования репозитория git) на только что установленном компьютере.

Постоянное исправление несложно, определите зависимость от pkgconfig в файле порта: depends_lib-append port: pkgconfig

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