可能是未定义的宏:AC_MSG_ERROR

时间:2012-01-10 22:21:41

标签: autotools autoconf

我在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位机器遇到这种困难。

更新我可以使用autoconf 2.67automake 1.11.1libtool 2.2.6bm4 1.4.14在CentOS计算机上重现此问题。这只是32位机器的错误吗?

19 个答案:

答案 0 :(得分:219)

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

安装软件包后,所有内容都正确生成。

答案 1 :(得分:31)

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

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

答案 2 :(得分: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或特定软件包只是绕过问题,它实际上并没有修复它。

答案 3 :(得分:11)

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

在可能的情况下,安装libcurl-devel后问题仍然存在(此计算机上已安装libcurl

答案 4 :(得分:10)

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

StateMilk_with_2_h <- StateMilk
StateMilk_with_2_h$State[StateMilk_with_2_h$State == "Chattisgarh"] <- "Chhattisgarh"
plot(gvisGeoChart(StateMilk_with_2_h, "State", "Total", 
                  options=list(region="IN", displayMode="regions", resolution="provinces", width=600, height=400)))

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

答案 5 :(得分:3)

您是否在设置本地“m4”目录?如,

> aclocal -I m4 --install

某些软件包附带autogen.shinitgen.sh shell脚本来运行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

答案 6 :(得分:3)

对于Debian。 必需的包是: m4 automake pkg-config libtool

答案 7 :(得分:2)

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

答案 8 :(得分:2)

使用MacOS X

sudo port install pkgconfig

是解决方案!

答案 9 :(得分:2)

在使用brew的Mac OS X el队长上,尝试:
brew install pkgconfig

这对我有用。

答案 10 :(得分:2)

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

已通过安装“ autoconf-archive”软件包对其进行了修复

答案 11 :(得分:1)

我在Mac上安装pkg-config(brew install pkg-config)

后解决了我的问题

答案 12 :(得分:1)

我通过<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> </LinearLayout>

解决了这个问题

答案 13 :(得分:1)

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

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

    • 对于ubuntu:sudo apt-get install libtool
    • 对于centos:sudo yum install libtool
  2. LIBTOOL.m4的路径是错误的 解决方案:

    1. 使用aclocal --print-ac-dir检查aclocal的当前路径。(通常应该是&#34; / usr / share / aclocal&#34;或&#34; / usr / share / aclocal&# 34)
    2. 然后检查是否有* .m4文件。
    3. 如果没有,则cp将* .m4文件对应此路径。(可能是cp /usr/share/aclocal/*.m4 /usr/local/share/aclocal/cp /usr/local/share/aclocal/*.m4 /usr/share/aclocal/
  3. 希望有所帮助

答案 14 :(得分:0)

当尝试使用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之后,终于找到了所有宏,并且构建成功。

答案 15 :(得分:0)

我刚刚失去了在这一个几个小时。我的结论:

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

答案 16 :(得分:0)

我在Ubuntu上遇到了同样的问题(error: possibly undefined macro: AC_MSG_ERROR),但上面的答案并不适用于我。我找到了解决方案here

这就是诀窍:

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

答案 17 :(得分:0)

当我忘记了一个本地定义的宏的参数时,这发生在我身上。花了几个小时试图解决它(几乎不熟悉autotools)......

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

应该是

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

似乎它应该给我一个错误或类似的错误,但我认为它是一个宏处理器,它只能做它所说的。

答案 18 :(得分:-1)

我在Macports端口遇到了同样的问题&#34; openocd&#34; (在本地修改了Portfile以使用git存储库)在新安装的计算机上。

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