Ответ 1
У меня была эта же проблема и выяснилось, что пакет pkg-config
отсутствует.
После установки пакета все генерируется правильно.
У меня есть следующее в файле 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
Может ли кто-нибудь объяснить причину этой ошибки и как отследить проблему?
EDIT: Добавление сведений о различиях.
Коробка, которая работает:
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-битными машинами?
У меня была эта же проблема и выяснилось, что пакет pkg-config
отсутствует.
После установки пакета все генерируется правильно.
Рекомендуется использовать autoreconf -fi
вместо ручного вызова aclocal;autoconf;automake; #and whatever else
для правильного заполнения aclocal.m4 и т.д.
Добавление ACLOCAL_AMFLAGS = -I m4
(toplevel Makefile.am) и AC_CONFIG_MACRO_DIR([m4])
в настоящее время по-прежнему не является обязательным, если вы не используете какие-либо собственные файлы m4, но, конечно же, это затихнет proocess:)
У меня была эта проблема с моим собственным 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
или конкретного пакета просто обходит проблему, она на самом деле не исправляет ее.
Я столкнулся с этой же проблемой в CentOS 7
В этом случае проблема исчезла после установки libcurl-devel
(libcurl
уже был установлен на этом компьютере)
У меня также была аналогичная проблема. Мое решение -
apt-get install libcurl4-openssl-dev
(у меня установлен libcurl allready) работал у меня хотя бы..
Вы настраиваете локальный каталог m4
? например.
> aclocal -I m4 --install
Некоторые пакеты поставляются с оболочкой autogen.sh
или initgen.sh
script для запуска glibtoolize, autoheader, autoconf, automake. Здесь autogen.sh
script Я использую:
#! /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
.
Ошибка генерируется autom4te. Если все правильно настроено, часть кода, генерирующего эту ошибку, никогда не увидит "AC_MSG_ERROR", потому что она должна была быть расширена на m4 до этой точки. Вы говорите, что ошибка происходит только "в некоторых настройках". Я бы предположил, что в этих настройках ваша установка autoconf является fubar. Возможно, у вас установлена несовместимая версия m4.
Использование MacOS X
sudo port install pkgconfig
было решением!
В Mac OS X el капитан с brew попробуйте:
brew установить pkgconfig
Это сработало для меня.
Для Debian. Необходимые пакеты: m4 automake pkg-config libtool
Это случилось со мной, когда я забыл в аргументах локально заданного макроса. Проработанные часы, пытаясь понять это (едва знакомы с автотюшками)...
AC_CHECK_MACRO([Foo]
AC_LOCAL_DO([......
должно быть
AC_CHECK_MACRO([Foo], # <-- Notice comma, doh!
AC_LOCAL_DO([......
Похоже, он должен был дать мне ошибку или такой, но я полагаю, что это макропроцессор, он может делать только то, что сказано.
У меня была та же проблема на Ubuntu (error: possibly undefined macro: AC_MSG_ERROR
), но ответы выше не работали для меня. Я нашел решение здесь
Это сделал трюк:
$ LANG=C LC_CTYPE=C ./autogen.sh
Моя проблема решена после установки pkg-config на Mac (brew install pkg-config)
Я решил это с помощью yum install libtool
У меня была такая же проблема с портом MacOS "openocd" (локально модифицированный Portfile для использования репозитория git) на только что установленной машине.
Постоянное исправление легко, определите зависимость от pkgconfig в Portfile: depends_lib-append port: pkgconfig