可能是未定义的宏:AC_MSG_ERROR

dbe*_*eer 106 autoconf autotools

我在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
Run Code Online (Sandbox Code Playgroud)

这已经在我们的项目中很长一段时间了,但在一些设置中,我得到这个错误:

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.
Run Code Online (Sandbox Code Playgroud)

最近在上面添加的行:

AC_CONFIG_MACRO_DIR([m4])
LT_INIT
Run Code Online (Sandbox Code Playgroud)

任何人都可以解释导致此错误的原因以及如何追踪问题?

编辑:添加有关差异的详细信息.

有效的盒子:

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
Run Code Online (Sandbox Code Playgroud)

不起作用的盒子:

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
Run Code Online (Sandbox Code Playgroud)

新编辑:只有32位机器遇到这个困难.

已更新我能够重现问题CentOS的机器上autoconf 2.67,automake 1.11.1,libtool 2.2.6b,和m4 1.4.14.这只是32位机器的错误吗?

小智 232

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

安装包后,一切都正确生成.

  • 我之前遇到过这个问题,安装```autoconf-archive```包解决了这个问题. (17认同)
  • 仅仅是因为技术上这不是解决问题的方法.在这种情况下,`AC_MSG_ERROR`试图说"你需要安装pkg-config"但由于某种原因它无法打印此消息(给出关于`AC_MSG_ERROR`的错误).通过安装`pkg-config`,不再需要打印错误消息,因此跳过`AC_MSG_ERROR`行并且工作正常.如果您正在安装其他人的软件包,那很好,但如果它是您自己的代码,您仍然没有解决问题:-) (10认同)
  • 我不得不安装`libtool`. (7认同)
  • 哇,这是autoreconfig吐出一个非常糟糕的错误消息的一个例子. (5认同)
  • 谢谢!概述我的情况,为同一个鞋子的下一个人.为了具有可重现的构建,我必须使用所有GNU Build System工具的自定义路径工具链.相当于安装pkg-config不仅可以修改PATH,还可以将`"-I /toolchain_local/pkg-config-0.23/share/aclocal"添加到`autoreconf`命令行.花了一些时间才意识到pkg-config不会只安装二进制文件.`rpm -ql pkgconfig`有帮助. (2认同)

jør*_*sen 31

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

添加ACLOCAL_AMFLAGS = -I m4(到顶层Makefile.am),AC_CONFIG_MACRO_DIR([m4])如果你不使用任何自己的m4文件,目前仍然是可选的,但当然,这样做会使这个过程沉默:)

  • 自动工具太破了……这些废话都说不通。30年后情况如何仍会破裂? (2认同)

Mal*_*ous 26

我有自己的这个问题configure.ac,但在这种情况下(并且为了Google的任何人的利益),这是因为我不小心引用了AC_MSG_ERROR所以它被视为字符串:

AX_BOOST_BASE([1.42], [], [AC_MSG_ERROR([Could not find Boost])])
Run Code Online (Sandbox Code Playgroud)

一旦我删除AC_MSG_ERROR宏周围的方括号,它工作:

AX_BOOST_BASE([1.42], [], AC_MSG_ERROR([Could not find Boost]))
Run Code Online (Sandbox Code Playgroud)

那些说你应该安装pkg-config或者一些软件包的评论都没有提到.本AC_MSG_ERROR应该是工作,像"你需要安装包XYZ"给你一个有用的信息,但由于一些问题,AC_MSG_ERROR不能正常工作.安装包XYZ肯定会使错误消失,但只是因为一旦包在那里,就不再需要打印错误消息了!

因此,安装pkg-config或特定包只是绕过了问题,它实际上并没有解决它.


jap*_*968 11

我在CentOS 7下遇到过同样的问题

在可能的情况下,安装后问题已经解决libcurl-devel(libcurl已安装在此机器上)


Bea*_*tes 11

我也有类似的问题..我的解决方案是

apt-get install libcurl4-openssl-dev
Run Code Online (Sandbox Code Playgroud)

(我已经安装了libcurl)至少为我工作..


小智 7

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

\n\n
    \n
  1. 没有安装aclocal。
    \n解决方案\xef\xbc\x9ainstall libtool

    \n\n
      \n
    • 对于Ubuntu:sudo apt-get install libtool
    • \n
    • 对于 CentOS:sudo yum install libtool
    • \n
  2. \n
  3. LIBTOOL.m4 的路径错误。
    \n解决方案:

    \n\n
      \n
    1. 使用aclocal --print-ac-dir检查 aclocal 的当前路径。(通常应该是“/usr/share/aclocal”或“/usr/share/aclocal”)
    2. \n
    3. 然后检查是否有*.m4文件。
    4. \n
    5. 如果没有,将相应的*.m4文件cp到该路径。(也许cp /usr/share/aclocal/*.m4 /usr/local/share/aclocal/或者cp /usr/local/share/aclocal/*.m4 /usr/share/aclocal/
    6. \n
  4. \n
\n\n

希望能帮助到你

\n


小智 6

I had the same problem on RHEL7.5 with otto-de/libvmod-uuid

It was fixed by installing "autoconf-archive" packages

  • 我需要“autoconf-archive”Debian 软件包来构建 powertop v2,31-rc1。 (2认同)

med*_*doc 6

我刚刚在这件事上浪费了几个小时。我的结论:

  • 根据版本和任何其他本地条件,autoconf 在遇到任何未定义的宏时都会吐出有关 AC_MSG_ERROR undefined 的消息。AC_MSG_ERROR 是一个转移注意力的问题。未定义宏的原因可能是:
    • 文件中宏名称的拼写错误,或未随 tarball 一起提供的本地宏
    • 缺少一个包含一组 autoconf 宏的包,其中一个在文件中使用。pkg-config 通常是缺失的(因为,例如 PKG_CHECK_MODULES),但这可能是提供所需但缺少的宏的任何其他包。当然,邪恶的事情是,这种情况发生在还不存在的配置脚本可以检查丢失的包之前......