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

У меня есть следующее в 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-битных машинах?

21 ответ

Решение

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

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

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

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

У меня была эта проблема с моим собственным 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 или конкретный пакет просто обходит проблему, но на самом деле не решает ее.

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

Это было исправлено путем установки пакетов "autoconf-archive"

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

apt-get install libcurl4-openssl-dev

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

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

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

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

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

    • Для убунту: 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/)

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

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

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

Для Debian. Необходимые пакеты: m4 automake pkg-config libtool

Вы настраиваете местный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,

Использование MacOS X

sudo port install pkgconfig

было решение!

У меня были похожие проблемы при попытке собрать 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

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

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

В Mac OS X el captain с напитком попробуйте:
brew install pkgconfig

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

Я решил это yum install libtool

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

Это сделало трюк:

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

Моя проблема решена после того, как я установил pkg-config на Mac (brew install pkg-config)

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

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

должно было

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

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

У меня также была эта проблема с начальной загрузкой (autoreconf) PC/SC lite на Debian Bullseye (с установленными современными автоинструментами). Причина была проста: два макроса M4 AX_PTHREAD и AX_RECURSIVE_EVAL не были определены. Итак, я погуглил файлы .m4, скачал их, скопировал в /usr/share/aclocal, и это, наконец, заработало. Автоинструменты GNU — распространенный источник проблем. Если вы можете просто выполнить: «./configure && make», вы счастливчик. Если вам нужно использовать autoreconf, потому что вам нужно изменить configure.ac и др., то многие проблемы могут помешать этому материалу работать:

  • установлены неправильные/устаревшие версии автоинструментов
  • очень старые файлы configure.ac и/или Makefile.am

Тем не менее, шаги по отладке, опубликованные выше, являются правильными и полезными.

вы используете automake в одной версии/местоположении и autoconf в другой. вы либо хотите удалить оскорбительный autoconf, либо automake со своего пути и убедитесь, что у вас правильная версия

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

Постоянное исправление очень просто, определите зависимость от pkgconfig в Portfile: depen_lib-append port:pkgconfig

Другие вопросы по тегам