我正在尝试从GutHub来源构建libpsl。它需要# Try to reconfigure. Autotools is so broken...
libtoolize --force && aclocal && autoheader && autoreconf --force --install
...
libtoolize: copying file 'm4/ltversion.m4'
libtoolize: copying file 'm4/lt~obsolete.m4'
configure.ac:62: error: possibly undefined macro: AC_MSG_ERROR
If this token and others are legitimate, please use m4_pattern_allow.
See the Autoconf documentation.
configure.ac:68: error: possibly undefined macro: AC_MSG_CHECKING
configure.ac:70: error: possibly undefined macro: AC_MSG_RESULT
configure.ac:87: error: possibly undefined macro: AC_LINK_IFELSE
configure.ac:88: error: possibly undefined macro: AC_LANG_PROGRAM
configure.ac:222: error: possibly undefined macro: AC_SEARCH_LIBS
...
。 Autotools is failing with:
-v
我找到了Possibly undefined macro: AC_MSG_ERROR和AS_IF and AC_MSG_ERROR: error: possibly undefined macro,但猜测并没有解决我的问题。我花了大约4个小时尝试猜测。
我想停止猜测并解决问题。我遇到的问题是,我无法找到有关解决Autotools问题的信息或程序。 Confer,"troubleshoot" autoconf site:gnu.org。
我提出的最好的方法是使用general.m4
运行命令,但我没有看到尝试复制general.m4
。如果我没有弄错的话,AC_MSG_ERROR
提供了$ find /usr/local -name general.m4
/usr/local/share/autoconf/autoconf/general.m4
/usr/local/share/autoconf/autotest/general.m4
,所以我应该看到它被访问了。所以我的程序有明显的差距或缺陷。文件存在:
Possibly undefined macro: AC_MSG_ERROR
如何解决Autotools的 WITH Encashment AS (
SELECT T.MachineId, T.Amount, CAST(Occured AS DATETIME) AS Occured
FROM (VALUES
(1, 101, '2017-10-20 09:36:40.057')
,(1, 203, '2017-10-14 12:36:30.081')
,(1, 400, '2017-10-11 04:17:38.023')
) AS T(MachineId, Amount, Occured)
), MoneyAccepted AS (
SELECT T.MachineId, T.Amount, CAST(Occured AS DATETIME) AS Occured
FROM (VALUES
(1, 1, '2017-10-15 09:36:40.057')
,(1, 100, '2017-10-16 12:36:30.081')
,(1, 100, '2017-10-12 16:17:38.023')
,(1, 1, '2017-10-13 09:37:47.057')
,(1, 1, '2017-10-13 09:37:47.057')
,(1, 1, '2017-10-12 15:37:47.057')
,(1, 100, '2017-09-15 12:37:31.081')
,(1, 100, '2017-09-15 16:37:31.081')
,(1, 100, '2017-09-16 13:37:31.081')
,(1, 100, '2017-09-17 13:37:31.081')
) AS T(MachineId, Amount, Occured)
)
问题?
答案 0 :(得分:2)
如何使用Autotools解决可能未定义的宏:
AC_MSG_ERROR
问题?
首先,在可能的情况下,应该通过不重建构建系统来完全避免这种情况。 Autotools构建系统不需要重建作为构建程序包的先决条件,因此第一步应该是在不运行Autotools的情况下尝试./configure; make
。
如果你确实需要重建构建系统,这有时是必要的,因为即使是最好的Autotools黑客也不可能解释所有可能的当前和未来的构建环境,那么第一部分是确保你有最新版本的Autotools并运行autoreconf --install --force
(我看到你已经在做了)。这可确保为您拥有的Autotools版本正确设置所有内容。
这带来了我们关于故障排除的实际问题,特别是关于引用标准Autoconf宏(例如AC_MSG_ERROR
)的错误排除方法。您可以使用多种工具和方法,其中包括:
查看警告中报告的configure.ac
行,尤其是最低的行,以及前面的行。此特定错误表示文本正在发送到看起来像未展开的宏名称的输出文件中,因此问题通常来自错误的引用或未关闭的宏参数列表。
检查Autoconf输出的configure
脚本。找到它出错的地方(在这种情况下,未展开的宏名称将帮助您找到它),并将该值和前面的正确输出与您configure.ac
的内容以及它所依赖的任何外部宏定义相关联。这可以帮助您查明错误的位置。
您可以使用#
或dnl
注释掉Autoconf源代码行,以应用二分法来追踪错误的行。
直接运行autoconf
,使用额外的面向调试的选项。例如,
autoconf --verbose --force --warnings=all
还有一个--debug
选项可以保留临时文件,但我怀疑它对您的用途没那么有用。
在某些情况下,通过使用--trace
选项跟踪对一个或多个宏的调用可能会有所帮助,尽管我没有看到与您询问的特定错误如此相关。请注意,跟踪输出取代autoconf
通常输出的配置脚本。
答案 1 :(得分:0)