autoreconf -fi 错误:可能未定义宏:AC_DEFINE 如果此令牌和其他令牌是合法的,请使用 m4_pattern_allow

Posted

技术标签:

【中文标题】autoreconf -fi 错误:可能未定义宏:AC_DEFINE 如果此令牌和其他令牌是合法的,请使用 m4_pattern_allow【英文标题】:autoreconf -fi error: possibly undefined macro: AC_DEFINE If this token and others are legitimate, please use m4_pattern_allow 【发布时间】:2016-12-24 20:15:19 【问题描述】:

我的 autoconf 设置相当新:

m4 (GNU M4) 1.4.17 and came with ubuntu
autoconf (GNU Autoconf) 2.69

我的 configure.ac 相当简单:

 30 ACX_PTHREAD([ 
 31   AC_DEFINE([HAVE_PTHREAD], [1], [Define if you have POSIX threads libraries and headers])
 32   gtest_LIBS="$PTHREAD_LIBS $LIBS"
 33   gtest_CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
 34   gtest_CXXFLAGS="$CXXFLAGS $PTHREAD_CXXFLAGS"
 35   gtest_CC="$PTHREAD_CC"
 36   gtest_CXX="$PTHREAD_CXX"])

运行 autconf 给了我错误:

autoreconf -fi
libtoolize: putting auxiliary files in '.'.
libtoolize: copying file './ltmain.sh'
libtoolize: putting macros in AC_CONFIG_MACRO_DIRS, 'm4'.
libtoolize: copying file 'm4/libtool.m4'
libtoolize: copying file 'm4/ltoptions.m4'
libtoolize: copying file 'm4/ltsugar.m4'
libtoolize: copying file 'm4/ltversion.m4'
libtoolize: copying file 'm4/lt~obsolete.m4'
configure.ac:31: error: possibly undefined macro: AC_DEFINE
      If this token and others are legitimate, please use m4_pattern_allow.
      See the Autoconf documentation.

我相信我的 ACX_PTHREAD 宏给我带来了麻烦。我查看了这个宏的定义,并没有发现任何奇怪的地方。有人建议这是由于其他情况下缺少 pkg.m4 造成的。我确认我的系统上安装了最新版本的 pkg-config。 pkg.m4 存在于我的系统上:/usr/share/aclocal。我一直在研究解决此问题的方法,但无处可去。

【问题讨论】:

【参考方案1】:

我的问题原来是由于缺少 axc_pthread.m4 文件。这就是我发现它的方式:

autoreconf -fi 给出了错误信息。如果我运行 autoreconf -i 那么程序将静默运行而不会出现任何错误消息。运行 ./configure 将在 ACX_PTHREAD(...) 逐字复制到配置文件的行中揭示问题。这表明我的系统中没有定义 ACX_PTHREAD 宏。

下载链接位于:http://ac-archive.sourceforge.net/ac-archive/acx_pthread.html。经过一些研究,似乎有很多来源提供了这个宏定义。不确定哪个更好。但我渴望解决这个问题。将此文件复制到我的项目的 m4 目录后,我的问题得到了解决。希望这可以帮助其他人。 autoconf 的问题在于,问题通常会显示错误的症状。

【讨论】:

您应该在包含ACX_PTHREAD(...) 的第一行上方添加一行m4_pattern_forbid([ACX_PTHREAD])dnl。然后包含字符串ACX_PTHREADconfigure 文件将被视为错误,configure 文件的生成将失败,并指向丢失的 m4 文件,该文件应定义为 ACX_PTHREAD

以上是关于autoreconf -fi 错误:可能未定义宏:AC_DEFINE 如果此令牌和其他令牌是合法的,请使用 m4_pattern_allow的主要内容,如果未能解决你的问题,请参考以下文章

使用了 Libtool 库,但未定义“LIBTOOL”?

keil4宏定义赋值报错

在 ImageJ 中运行宏时出现未定义的变量错误

autoreconf:未找到命令

&errno 合法吗?

c语言宏定义问题