Возможно неопределенный макрос: 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
была уже установлена на эту машину)
Есть две возможные причины этой проблемы:
не установил aclocal.
решение : установить libtool- Для убунту:
sudo apt-get install libtool
- Для Centos:
sudo yum install libtool
- Для убунту:
путь к LIBTOOL.m4 является ошибкой.
решение:- использование
aclocal --print-ac-dir
проверить текущий путь к aclocal (обычно это должен быть "/usr/share/aclocal" или "/usr/share/aclocal") - Затем проверьте, есть ли файлы *.m4.
- Если нет, то 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
Это сработало для меня.
У меня была такая же проблема на 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