How to overcome "'aclocal-1.15' is missing on your system" warning?

我试图在 github 上运行 c + + 程序

我有一台 Mac 电脑,正在终端机上运行。我想我已经下载了 autoconf 和 auto make,但不确定。要运行程序,我要到正确的文件夹在终端然后运行

./configure && make

但我得到了一个错误:

警告: 系统中缺少“ aclocal-1.15”。 你应该只需要它,如果你修改“ acinclude. m4”或 'configure.ac' or m4 files included by 'configure.ac'. “ aclocal”程序是 GNU Automake 软件包的一部分: Http://www.gnu.org/software/automake 它还需要 GNU Autoconf、 GNU m4和 Perl 才能运行: Http://www.gnu.org/software/autoconf Http://www.gnu.org/software/m4/ Http://www.perl.org/ make: * * * [ aclocal.m4]错误127

我有 xcode 和 g + + 以及运行 c 程序所需的所有东西,但是很明显,我不知道我在做什么。

在上面的链接中运行程序最简单的方法是什么?我知道它带有自述文件和示例用法,但我不能让它工作。

150361 次浏览

通常,您不需要任何 auto*工具,最简单的解决方案是在相关文件夹中运行 touch aclocal.m4 configure(如果存在 Makefile.amMakefile.in,也可以在它们上运行 touch)。这将更新 aclocal.m4的时间戳,并提醒系统 aclocal.m4是最新的,不需要重建。在此之后,最好清空 build目录,并在执行此操作之后从头重新运行 configure。我经常遇到这个问题。对我来说,根本原因是我从另一个文件夹复制了一个库(例如 mpfr代码为 touch aclocal.m4 configure0) ,时间戳发生了变化。

当然,如果您确实需要重新生成这些文件,这个技巧是无效的,可能是因为您已经手动更改了它们。但希望包的开发人员分发最新的文件。


当然,如果您确实想要安装 automake和好友,那么可以为您的发行版使用适当的包管理器。


安装 aclocal,它是自动制造的:

brew install automake          # for Mac
apt-get install automake       # for Ubuntu

再试一次:

./configure && make

在运行 ./configure之前,尝试运行 autoreconf -f -i。 autoreconf 程序会根据需要自动运行 autoheader、 aclocal、 auto make、 autopoint 和 libtoize。

编辑添加: 这通常是由于从 Git 签出代码而不是从 .zip.tar.gz归档文件中提取代码造成的。为了在文件更改时触发重新构建,Git 不保留文件的时间戳,因此 configure脚本可能看起来已经过期。正如其他人所提到的,如果您没有足够新的 autoreconf版本,那么有一些方法可以绕过这个问题。

另一个编辑: 这个错误也可能是由于将用 scp 从存档中提取的源文件夹复制到另一台计算机造成的。可以更新时间戳,表明需要重新构建。为了避免这种情况,复制存档并将其解压缩到适当的位置。

可能适用于或不适用于这种特殊情况的一般性答案:

正如错误消息提示的那样,只有在修改了用于生成 aclocal.m4的文件时,才需要 aclocal-1.15

如果不修改这些文件中的任何一个(包括 configure.ac) ,那么应该不需要 aclocal-1.15。

In my case, the problem was not that any of those files was modified but somehow the timestamp on configure.ac was 6 minutes later compared to aclocal.m4.

我还不知道为什么,但是一个干净的 Git 回购克隆为我解决了这个问题。也许是与 Git 相关的东西,以及它最初是如何创建文件的。

与其重新运行 autoconf 和 friends,不如使用 只是试着得到一个干净的克隆,然后再试一次

也有可能有人提交了对 configure.ac 的更改,但是没有重新生成 aclocal.m4,在这种情况下,您确实需要重新运行 auto make 和 friends。

Autotools 的全部意义在于提供一种神秘的基于 m4宏的语言,最终编译成一种名为 ./configure的 shell 脚本。您可以将这个已编译的 shell 脚本与源代码一起发布,这个脚本应该完成检测环境和准备构建程序的所有工作。只有想要调整测试和刷新 shell 脚本的人才需要 Autotools。

如果 GNU This 和 GNU That 必须安装在系统上才能正常工作,那么 Autotools 的观点就站不住脚了。最初,它的发明是为了简化将程序移植到各种 Unix 系统的过程,因为不能指望这些系统上有任何东西。甚至在 ./configure中生成的 shell 代码所使用的构造也必须非常仔细地选择,以确保它们能够在几乎所有破损的旧 shell 上工作。

您遇到的问题是由于一些错误的 Makefile 步骤,这些步骤是由那些根本不了解 Autotools 的用途和最终 ./configure脚本的角色的人发明的。

As a workaround, you can go into the Makefile and make some changes to get this out of the way. As an example, I'm building the Git head of GNU Awk and running into this same problem. I applied this patch to Makefile.in, however, and I can sucessfully make gawk:

Diff —— git a/Makefile.in b/Makefile.in

index 5585046..b8b8588 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -312,12 +312,12 @@ distcleancheck_listfiles = find . -type f -print


# Directory for gawk's data files. Automake supplies datadir.
pkgdatadir = $(datadir)/awk
-ACLOCAL = @ACLOCAL@
+ACLOCAL = true
AMTAR = @AMTAR@
AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
+AUTOCONF = true
+AUTOHEADER = true
+AUTOMAKE = true
AWK = @AWK@
CC = @CC@
CCDEPMODE = @CCDEPMODE@

基本上,我修改了一些内容,以便用无害的 true shell 命令代替所有 Auto-stuff 程序。

Gawk 的实际构建步骤不需要 Auto-stuff!它只涉及到一些规则,这些规则在 Auto-stuff 的某些部分发生更改并需要重新处理时才会被调用。然而,Makefile 的结构是这样的: 如果没有这些工具,它就会失败。

以上补丁前:

$ ./configure
[...]
$ make gawk
CDPATH="${ZSH_VERSION+.}:" && cd . && /bin/bash /home/kaz/gawk/missing aclocal-1.15 -I m4
/home/kaz/gawk/missing: line 81: aclocal-1.15: command not found
WARNING: 'aclocal-1.15' is missing on your system.
You should only need it if you modified 'acinclude.m4' or
'configure.ac' or m4 files included by 'configure.ac'.
The 'aclocal' program is part of the GNU Automake package:
<http://www.gnu.org/software/automake>
It also requires GNU Autoconf, GNU m4 and Perl in order to run:
<http://www.gnu.org/software/autoconf>
<http://www.gnu.org/software/m4/>
<http://www.perl.org/>
make: *** [aclocal.m4] Error 127

补丁之后:

$ ./configure
[...]
$ make gawk
CDPATH="${ZSH_VERSION+.}:" && cd . && true -I m4
CDPATH="${ZSH_VERSION+.}:" && cd . && true
gcc -std=gnu99 -DDEFPATH='".:/usr/local/share/awk"' -DDEFLIBPATH="\"/usr/local/lib/gawk\"" -DSHLIBEXT="\"so"\" -DHAVE_CONFIG_H -DGAWK -DLOCALEDIR='"/usr/local/share/locale"' -I.     -g -O2 -DNDEBUG -MT array.o -MD -MP -MF .deps/array.Tpo -c -o array.o array.c
[...]
gcc -std=gnu99  -g -O2 -DNDEBUG  -Wl,-export-dynamic -o gawk array.o awkgram.o builtin.o cint_array.o command.o debug.o dfa.o eval.o ext.o field.o floatcomp.o gawkapi.o gawkmisc.o getopt.o getopt1.o int_array.o io.o main.o mpfr.o msg.o node.o profile.o random.o re.o regex.o replace.o str_array.o symbol.o version.o      -ldl -lm
$ ./gawk --version
GNU Awk 4.1.60, API: 1.2
Copyright (C) 1989, 1991-2015 Free Software Foundation.
[...]

好了。如您所见,这里的 CDPATH=命令行是调用 Auto-stuff 的地方,在这里您可以看到 true命令。这些报告成功终止,所以它只是通过这些垃圾做该死的构建,这是完美的配置。

我之所以选择 make gawk,是因为有一些子目录的构建失败了; 对于它们各自的 Makefile,必须重复这个技巧。

如果您遇到了这种情况,并且程序开发人员提供了一个原始的、官方的 tarball,那么请抱怨。它应该只是解包,./configuremake没有你必须修补任何东西或安装任何自动化或 Autoconf 材料。

Ideally, a pull of their Git head should also behave that way.

问题不在于 automake包,而在于存储库

sudo apt-get install automake

安装版本 aclocal-1.4,这就是为什么你找不到 1.5(在 Ubuntu14,15)

Use this script to install latest Https://github.com/gp187/nginx-builder/blob/master/fix/aclocal.sh

您可以很容易地安装所需的版本:

首先获取来源:

$ wget https://ftp.gnu.org/gnu/automake/automake-1.15.tar.gz

解开它:

$ tar -xzvf automake-1.15.tar.gz

构建和安装:

$ cd automake-1.15
$ ./configure  --prefix=/opt/aclocal-1.15
$ make
$ sudo mkdir -p /opt
$ sudo make install

使用它:

$ export PATH=/opt/aclocal-1.15/bin:$PATH
$ aclocal --version

Aclocal (GNU auto make)1.15

现在,当调用 aclocal 时,就得到了正确的版本。

2017年-高山

在 Mac 上很难让 autoconf 1.15工作。我们雇了个专家来修。一切都很顺利。

后来我碰巧把 Mac 升级到了 High Sierra。

The Docker pipeline stopped working!

尽管 autoconf 1.15 is在 Mac 上运行良好。

如何解决,

简而言之,我只是把当地的回收站弄得一团糟,然后又检查了一遍回收站。

这个建议在本质量保证页面和其他地方的混合文章中都有提到。

然后它工作得很好!

可能和 使用 aclocal.m4和类似的文件有关(但谁知道真的是什么)。我无休止地修改那些文件... ... 但是什么也没有。

For some unknown reason if you just scratch your repo and get the repo again: everything works!

我尝试了几个小时,每个组合的触摸/删除等文件的问题,但没有。只要看看从头开始的回购!

我认为 touch 命令是正确的答案

touch --date="`date`" aclocal.m4 Makefile.am configure Makefile.in

在[ ./configure & & make ]之前。

边栏 I: 否则,我同意@kaz: 为 aclocal.m4和/或 configure 和/或 Makefile.am 和/或 Makefile.in 添加依赖关系会使目标系统的假设可能无效。具体来说,这些假设是

1)所有的目标系统都有自动化工具,

2)所有目标系统都有相同版本的 autotools (例如,本例中的 automake.1.15)。

3)如果(1)或(2)对于任何用户都不正确,那么用户将从维护人员生成的 TAR 或 ZIP 格式中提取包,该格式保持相关文件的时间戳,在这种情况下,configure 生成的 Makefile 中的所有 autotool/configure/ Makefile.am/Makefile.in 依赖关系都将得到满足。

第二个假设在许多 Mac 系统上都失败了,因为 auto make.1.14是 OSX 的“最新”版本(至少我在 MacPorts 中看到了这一点,而且很显然,对于 brew 也是如此)。

在 Github 的世界里,第三个假设显然失败了。这个失败是一个“每个人都认为他们是规范的”心态的例子; 具体来说,维护人员,即应该需要编辑 Makefile.am 的 只有类用户,现在已经将 所有人放入该类。

也许 autowhatever 中有一个选项可以防止这些依赖项被添加到 Makefile.in 和/或 Makefile 中。

Sidebar II [Why @kaz is right]: of course it is obvious, to me and other cognoscenti, to simply try a sequence of [touch] commands to fool the configure-created Makefile from re-running configure and the autotools. But that is not the point of configure; the point of configure is to ensure as many users on as many different systems as as possible can simply do [./configure && make] and move on; most users are not interested in "shaving the yak" e.g. debugging faulty assumptions of the autotools developers.

边栏三: 可以说。现在 autotools 添加了这些依赖项,配置/configure 是用于 Github 分布式包的错误构建工具。

边栏 IV: 也许基于配置的 Github 回购应该在自述文件中加入必要的 touch 命令,例如 https://github.com/drbitboy/Tycho2_SQLite_RTree

2018年,又一个解决方案。

Https://github.com/apereo/mod_auth_cas/issues/97

有些案子中简单地运行

$ autoreconf -f -i

没有别的办法... 能解决问题。

在目录 /pcre2-10.30中执行此操作。

真是个噩梦。

(这通常是 没有在2017年解决了问题,但现在通常 是的似乎解决了问题-他们修复了一些东西。此外,似乎您的 Dockerfile 现在应该通常以“ FROM ibmcom/swift-ubuntu”开头; 以前您必须给出某个版本/dev-build 才能使其工作。)