可能未定义的宏: 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.67automake 1.11.1libtool 2.2.6bm4 1.4.14重现这个问题。这只是一个32位机器的 bug 吗?

151194 次浏览

正在设置本地的“ m4”目录吗,

> aclocal -I m4 --install

有些包带有 autogen.shinitgen.sh shell 脚本,可以运行 glibtoolize、 autoheader、 autoconf 和 auto make。下面是我使用的 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

该错误是由 auto4te 生成的。如果设置正确,那么生成错误的代码部分应该永远不会看到‘ AC _ MSG _ ERROR’,因为它应该在该点之前展开 m4。你说错误只发生在“某些设置中”。我建议在这些设置中,您的 autoconf 安装是 fubar。可能您安装了不兼容的 m4版本。

建议使用 autoreconf -fi而不是手动调用 aclocal;autoconf;automake; #and whatever else来正确填充 aclocal.m4等。

如果您不使用任何自己的 m4文件,那么添加 ACLOCAL_AMFLAGS = -I m4(到顶级 Makefile.am)和 AC_CONFIG_MACRO_DIR([m4])目前仍然是可选的,但是当然,这样做会使进程静默:)

我有同样的问题,发现 pkg-config包丢失。

在安装包之后,一切都正确生成。

使用 MacOS X

sudo port install pkgconfig

就是解决办法!

我在 CentOS7中也遇到过同样的问题

在可能的情况下,问题在安装 libcurl-devel之后发生(libcurl已经安装在这台机器上)

我在一台新安装的机器上使用 Macports 端口“ openocd”(在本地修改 Portfile 以使用 git 存储库)时遇到了同样的问题。

永久修复很简单,在 Portfile 中定义对 pkgconfig 的依赖项: Depes _ lib-append port: pkgconfig

当我在本地定义的宏的参数中忘记 a 时,就会发生这种情况。花了几个小时试图弄明白(几乎不熟悉自动工具) ..。

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

应该是的

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

似乎它应该给我一个错误或这样的,但我认为作为一个宏处理器,它只能做它告诉。

在苹果操作系统上,试一下:
安装 pkgconfig

这招对我很管用。

我在 Ubuntu (error: possibly undefined macro: AC_MSG_ERROR)上也遇到过同样的问题,但是上面的答案对我不起作用。我找到了解决方案 给你

这招奏效了:

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

我自己的 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或某个特定的包只是绕过了问题,实际上并没有修复它。

在 Mac 上安装 pkg-config (brewinstall pkg-config)之后,问题就解决了

我用 yum install libtool解决了这个问题

为了 Debian。 所需包装如下: M4 auto make pkg-config libtool

我也有类似的问题. . 我的解决办法是

apt-get install libcurl4-openssl-dev

(我已经安装了 libcurl) 至少对我有用。

这个问题有两个可能的原因:

  1. 没有安装 aclocal。
    解决方案: 安装 libtool

    • 对于 ubuntu: sudo apt-get install libtool
    • 片段: sudo yum install libtool
  2. 到 LIBTOOLm4的路径是错误的。
    解决方案:

    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/)

希望能有帮助

我在 RHEL7.5中使用 otto-de/libvmod-uuid 遇到了同样的问题

通过安装“ autoconf-archive”包修复了这个问题

我只是在这件事上浪费了几个小时,我的结论是:

  • 根据版本和其他任何本地条件,autoconf 在遇到 任何未定义的宏时将显示关于 AC _ MSG _ ERROR 未定义的消息。AC _ MSG _ ERROR 是一个转移注意力的东西。未定义宏的原因可以是:
    • 文件中某个宏名称的输入错误,或者没有随 tarball 一起提供的本地宏
    • 缺少一个包,这个包本来应该包含一组 autoconf 宏,其中一个宏在文件中使用。Pkg-config 通常是缺少的一个(因为,例如,PKG _ CHECK _ MODULES) ,但是这可能是提供所需但不存在的宏的任何其他包。当然,残酷的是,这种情况发生在尚未存在的配置脚本可以检查丢失的包裹之前... ..。

我在尝试用 jhbuild 构建 amtk 和 utthpmock 时遇到过类似的问题。

我需要安装 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之后,最终找到所有宏,构建成功。

您在一个版本/位置中使用 auto make,在另一个版本/位置中使用 autoconf。您可能希望从路径中删除有问题的 autoconf 或 automake,并确保具有正确的版本

我也有这个问题引导(autoreconf) PC/SC 文件在 Debian 靶心(与最新的自动工具安装)。原因很简单: 没有定义两个 M4宏 AX _ PTHREAD 和 AX _ RECURSIVE _ EVAL。 所以我谷歌了. m4文件,下载了它们,把它们复制到/usr/share/aclocal 中,它终于起作用了。 GNU autotools 是问题的常见来源。如果你能做到:。你是一个幸运的人。 如果你必须使用 autoreconf,因为你必须修改 configure.ac 等,那么许多问题可以停止这些东西的工作:

  • 安装了错误/过时的 autotools 版本
  • 非常老的 configure.ac 和/或 Makefile.am 文件

尽管如此,上面提到的调试步骤是正确和有帮助的。