编译 autoconf 导致版本报告不正确

Posted

技术标签:

【中文标题】编译 autoconf 导致版本报告不正确【英文标题】:Compiling autoconf results in an incorrect version reporting 【发布时间】:2018-05-30 00:13:20 【问题描述】:

我想从 autoconf 2.62 更新到 2.69。

我下载了源代码并运行了以下内容:

./configure
make
make install

这些都成功完成了。

当我运行 autoconf --version 时,我得到以下信息:

autoconf --version
autoconf (GNU Autoconf) ?K??
Copyright (C) 2012 Free Software Foundation, Inc.
License GPLv3+/Autoconf: GNU GPL version 3 or later
<http://gnu.org/licenses/gpl.html>, <http://gnu.org/licenses/exceptions.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Written by David J. MacKenzie and Akim Demaille.

您在此处看到的问题是版本报告为 ?K??

为什么会这样?我的机器在 EBCDIC 代码页中运行,我想知道这是否可以关联。有没有我需要添加的配置/制作选项。

这个问题使我无法编译其他软件,因为配置脚本会检查版本 autoconf 报告并最终未能通过这些检查。

-----更新----- 我已按要求运行make check,这是输出:

autoconf269: >make check
make  check-recursive
Making check in bin
Making check in .
Making check in lib
Making check in Autom4te
Making check in m4sugar
make  check-local
Making check in autoconf
make  check-local
Making check in autotest
make  check-local
Making check in autoscan
Making check in emacs
Making check in doc
make: Makefile: line 436: Warning -- FSUM9433 Duplicate entry [fdl.texi] in prerequisite list
Making check in tests
make  check-local
cd ../lib/autotest && make  autotest.m4f
`autotest.m4f' is up to date
autom4te_perllibdir='..'/lib                     AUTOM4TE_CFG='../lib/autom4te.cfg'         ../bin/autom4te  -B '..'/lib -B '..'/lib --language=autotest -I . -I . suite.at -o ./testsuite.tmp
m4:local.at:18: bad expression in eval (bad input): ((?+1+0) > (2+0)) - ((?+1+0) < (2+0))
autom4te: /workarea/tools/m4/bin/m4 failed with exit status: 1
FSUM8226 make: Error code 1 
FSUM8226 make: Error code 255 
FSUM8226 make: Error code 1 
FSUM8226 make: Error code 255 

我的目光被吸引到了:m4:local.at:18: bad expression in eval (bad input): ((?+1+0) &gt; (2+0)) - ((?+1+0) &lt; (2+0))——你知道为什么这可能被认为是一个糟糕的表达方式吗?

【问题讨论】:

您是否尝试使用发行版包管理器进行更新?更新你的构建链不太可能像这样零散地工作。 这个平台没有包管理器! 试试autoconf --version | grep \062\056\066\071 | tr '\062\056\066\071' '2.69'(八进制转义符是2.69 in ASCII)。如果它打印正确的版本行,您可能有 EBCDIC 问题。您也可以在顶层 autoconf-2.69 源目录中尝试grep AC_INIT configure.ac,以确定它是否打印2.69。我不知道您在使用专门处理 ASCII 的 autoconf 之后可能会遇到什么问题,但这至少为您提供了一些有价值的信息。 如果您正在使用 z/OS 或某些此类平台,其中 EBCDIC 代码页是本机执行字符集,您应该尝试查找一些补丁。 Python 开发人员在某一时刻拒绝了上游 EBCDIC 补丁 (Issue 1298),因此如果 autoconf 也与 EBCDIC 不兼容,我不会感到惊讶,如果您没有发现任何补丁,我也不会感到惊讶。同样,EBCDIC 问题(如果有的话)可能完全不相关,但它可能对我们所知道的有所帮助。 make check 似乎对数字没有问题,但其错误输出中的 ? 可能有问题。 【参考方案1】:

一种可能性:您编译的 autoconf 安装在 /usr/local 中,而预安装的 autoconf 安装在 /usr 中。 /usr 在 PATH 中排在第一位,因此使用的是预装的。

您还可以在运行 make install 之前检查版本,以确保新版本解决了您的问题。

【讨论】:

不幸的是,在 make 之后,如果我进入 bin 目录并运行 ./autoconf -V 我还会得到一个版本报告?K??。路径只有 1 个目录,其中包含我的新 autoconf。 autoconf 是一个 shellscript,因此您可以在文本编辑器中打开它并手动修复版本号。但问题仍然存在,构建过程中出了什么问题 看起来版本号是用一些 m4 魔法生成的。您可以尝试从您的 autoconf 发行版中运行“make check”吗? 我已经编辑了问题以包含 make check 的新内容输出 - 谢谢@arved。

以上是关于编译 autoconf 导致版本报告不正确的主要内容,如果未能解决你的问题,请参考以下文章

由于 Direct X 版本不正确导致的编译错误

如何在 Autoconf 中确定编译器名称或供应商?

如何正确使用带有子目录的 automake/autoconf?

Linux系统之Cherokee Web服务器的编译安装详细教程

Linux autotools有啥用

如何正确更新 m4、autoconf、automake 和 libtool? Mac OSX