可能未定义的宏:AC_MSG_ERROR


113

我在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.6b,和m4 1.4.14。这仅仅是32位计算机的错误吗?


为什么这是个问题?使用autoconf 2.67构建您的tarball。您只需要在一台计算机上安装autoconf!
威廉·珀塞尔

1
我知道我可以轻松解决此问题,我只是想确保它与一个框相关,而不是在configure.ac或其他配置文件中存在问题。
dbeer 2012年

我知道autoconf 2.64被认为是相当多的错误。您可能遇到了2.65中的错误。
William Pursell 2012年

1
我能够重现问题的另一个32位机器上的autoconf 2.67,automake的1.11.1,libtool的2.2.6b和M4 1.4.14
dbeer

1
我无法想象这会有所帮助:但是您是否尝试过AC_CHECK_PROGS([MAKE],[$ MAKE make gmake],[error])吗?这绝对听起来像是m4问题,并且完全引用m4只会有所帮助。这行可能不是罪魁祸首,但闻起来像是某处的报价问题。您可以发布完整的configure.ac吗?
威廉·珀塞尔

Answers:


256

我遇到了同样的问题,发现pkg-config缺少包裹。

安装软件包后,一切都将正确生成。


2
谢谢!概述我的情况,下一个穿着相同鞋子的人。为了拥有可复制的版本,我必须使用自定义路径的工具链来访问所有GNU Build System工具。安装pkg-config不仅可以修改PATH,而且可以添加"-I /toolchain_local/pkg-config-0.23/share/aclocal"autoreconf命令行。花了我一些时间认识到pkg-config不会仅安装二进制文件。rpm -ql pkgconfig帮助了。
阿萨姆巴2014年

7
我必须安装libtool
Mitar

11
仅供参考,这并不能解决问题。在这种情况下,AC_MSG_ERROR试图说“您需要安装pkg-config”,但是由于某种原因,它无法打印此消息(给出有关的错误AC_MSG_ERROR)。通过安装pkg-config,不再需要打印错误消息,因此该AC_MSG_ERROR行被跳过,一切正常。如果您正在安装别人的软件包,那很好,但是如果它是您自己的代码,那么您仍然没有解决问题:-)
Malvineous

19
我之前遇到过此问题,并且安装了autoconf-archive软件包即可解决此问题。
jonthalpy

5
哇,这是autoreconfig吐出非常错误的错误消息的示例。
约翰·格林

31

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

如果您不使用任何自己的m4文件,则将其添加ACLOCAL_AMFLAGS = -I m4(添加到顶层Makefile.am中)AC_CONFIG_MACRO_DIR([m4])当前仍然是可选的,但是,当然,这样做会使过程静音:)


我们有m4个文件,因此这是我们必需的。此外,将其更改为autoreconf -fi会产生相同的错误。
dbeer 2012年

1
如果您确实有m4个文件,则应该执行ACLOCAL_AMFLAGS和AC_CONFIG_MACRO_DIR。(并把该文件在M4 /,RESP您指定的目录。)
约根森

谢谢,autoreconf -fi使PCRE可以编译。
uınbɐɥs

我有这个确切的同样的问题,我发现我已经错过了设定ACLOCAL_AMFLAGSMakefile.am-谢谢!
simpleigh 2014年

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

27

我自己遇到了这个问题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或特定软件包只会绕过问题,实际上并不能解决问题。


12

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

apt-get install libcurl4-openssl-dev

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


11

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

在某些情况下,安装libcurl-devellibcurl已安装在本机上)后问题就消失了



3

您是否正在建立本地“ m4”目录?例如,

> aclocal -I m4 --install

一些软件包带有autogen.shinitgen.shShell脚本来运行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


autoreconf是否在Darwin上没有选择适当的libtoolize?
威廉·珀塞尔

我正在设置本地“ m4”目录。我添加了-I m4 --install到aclocal,但是出现了同样的错误。这是我的autogen.sh脚本:libtoolize -c -f autoheader -f aclocal -I m4 --install autoconf -f automake --foreign --add-missing --force-missing --copy
dbeer 2012年

1
@dbeer,添加了ACLOCAL_AMFLAGS变量?
Brett Hale 2012年

@WilliamPursell不,不是。MacOS将GNU libtool的功能称为“ glibtool”,而Apple提供的功能(其行为与GNU libtool的预期不同)为“ libtool”。请注意,libtoolize也作为“ glibtoolize”安装。可以通过指定LIBTOOLIZE和LIBTOOL宏来覆盖它。尽管这个autogen示例很好,但通常最好只运行autoreconf -fi并让它猜测/恢复前一次运行的-I标志,尤其是在您不使用该软件的情况下。
LeoTh3o


2

该错误是由autom4te生成的。如果一切设置正确,则生成该错误的代码部分将永远不会看到“ AC_MSG_ERROR”,因为在此之前应已将其扩展了m4。您说该错误仅在“某些设置”中发生。我建议在这些设置中,您的autoconf安装是fubar。可能您安装了不兼容的m4版本。


我正在使用autoconf 2.65和m4 1.4.13。这些兼容吗?
dbeer 2012年

m4 1.4.13已经足够新了,不太可能是问题所在。您能确定看到警告的设置与没有看到警告的设置有什么不同吗?
威廉·珀塞尔

我刚刚在问题中添加了一些信息-您还能想到其他相关的东西吗?关于自动工具,我不是很了解。
dbeer 2012年

刚注意到-32位机器似乎是困难的机器。
dbeer 2012年


2

在带有brew的Mac OS X el机长上,尝试:
brew install pkgconfig

这对我有用。


2

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

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

    • 对于ubuntu: 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/

希望能帮助到你


1

我在Ubuntu(error: possibly undefined macro: AC_MSG_ERROR)上遇到了同样的问题,但以上答案对我不起作用。我在这里找到解决方案

达到目的:

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

1

在Mac上安装pkg-config后,我的问题已解决(简装安装pkg-config)



0

当我在本地定义的宏的参数中忘记了时,这发生在我身上。花费数小时试图弄清楚(几乎不了解自动工具)...

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

本来应该

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

似乎它应该给了我一个错误之类的信息,但是我想作为一个宏处理器,它只能执行其所告诉的事情。


0

我在这上面花了几个小时。我的结论是:

  • 根据版本和其他任何本地条件,autoconf将在遇到ANY undefined宏时吐出有关AC_MSG_ERROR undefined的消息。AC_MSG_ERROR是红色鲱鱼。未定义宏的原因可能是:
    • 文件中宏名称的错字,或者tarball尚未附带的本地宏
    • 缺少本应带有一组autoconf宏的软件包,该宏在文件中使用。pkg-config通常是缺少的(因为,例如,PKG_CHECK_MODULES),但这可能是提供所需但缺少宏的任何其他软件包。当然,恶毒的是,这是在还不存在的配置脚本可以检查缺少的程序包之前发生的...


-1

在新安装的计算机上,Macports端口“ openocd”(在本地修改了Portfile以使用git存储库)遇到了相同的问题。

永久修复很容易,在Portfile中定义对pkgconfig的依赖项:depends_lib-append port:pkgconfig

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.