如何克服"'aclocal-1.15' is missing on your system"警告?

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

本文关键字:on missing your system 警告 is 何克服 aclocal-1 克服      更新时间:2023-10-16

我试图在github上运行一个c ++程序。(可在以下链接 https://github.com/mortehu/text-classifier 获得(

我有一台Mac,正在尝试在终端中运行它。我想我已经下载了自动确认和自动制作,但不确定。要运行该程序,我将转到终端中的正确文件夹,然后运行

./configure && make 

但是我得到错误:

警告:"aclocal-1.15"在您的系统上丢失。 只有当您修改了"acinclude.m4"或 "configure.ac"或"configure.ac"中包含的 m4 文件。 "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 程序所需的所有东西,但很明显,我不知道我在做什么。

在上面的链接中运行程序的最简单,最简单的方法是什么?我意识到它带有自述文件和示例用法,但我无法使其工作。

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

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

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

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

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


当然,如果您确实想安装automake和朋友,请使用适合您的发行版的软件包管理器。


安装自动制作附带的本地:

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

再试一次:

./configure && make 

您可以轻松安装所需的版本:

首先获取源:

$ 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 automake( 1.15

现在,当调用 aclocal 时,您将获得正确的版本。

可能适用于也可能不适用于此特定情况的通用答案:

正如错误消息所暗示的那样,仅当您修改了用于生成 aclocal.m4 的文件时,才需要 aclocal-1.15

如果您不修改任何这些文件(包括 configure.ac(,则不需要 aclocal-1.15。

就我而言,问题不在于这些文件中的任何一个都被修改了,而是与 aclocal.m4 相比,configure.ac 上的时间戳晚了 6 分钟。

还没有弄清楚为什么,但是我的git存储库的干净克隆为我解决了这个问题。也许与 git 相关的内容以及它最初是如何创建文件的。

与其重新运行自动会议和朋友,我只会尝试获得一个干净的克隆并重试

也有可能有人提交了对 configure.ac 的更改,但没有重新生成 aclocal.m4,在这种情况下,您确实必须重新运行 automake 和朋友。

Autotools的全部意义在于提供一种晦涩的基于M4宏的语言,该语言最终编译为名为./configure的shell脚本。您可以将此编译的 shell 脚本与源代码一起发布,该脚本应执行所有操作来检测环境并准备用于构建的程序。只有想要调整测试并刷新 shell 脚本的人才需要自动工具。

如果必须在系统上安装 GNU This 和 GNU That 才能正常工作,它就违背了 Autotools 的意义。最初,它的发明是为了简化程序移植到各种Unix系统的过程,这些系统不能指望它们上面有任何内容。即使是在./configure中生成的 shell 代码使用的构造也必须非常仔细地选择,以确保它们几乎可以在任何地方的每个损坏的旧 shell 上运行。

您遇到的问题是由于那些根本不了解Autotools的用途以及最终./configure脚本的作用的人发明的一些损坏的Makefile步骤。

作为解决方法,您可以进入 Makefile 并进行一些更改以解决此问题。举个例子,我正在构建GNU Awk的Git头,并遇到了同样的问题。但是,我将此补丁应用于Makefile.in,我可以成功地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 命令被替换为所有自动填充程序。

Gawk 的实际构建步骤不需要自动填充!它只涉及一些规则,如果自动内容的某些部分已更改并需要重新处理,则会调用这些规则。但是,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 重复这个技巧。

如果你遇到这种事情,从它的开发人员那里得到一个原始的,官方的程序包,那就抱怨吧。它应该只是解压缩,./configuremake,而无需修补任何东西或安装任何Automake或Autoconf材料。

理想情况下,拉动他们的 Git 头也应该以这种方式运行。

我认为触摸命令是正确的答案,例如做类似的事情

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

在 [./配置 && make] 之前。

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

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

2(所有目标系统都具有相同版本的autotools(例如,在这种情况下为automake.1.15(。

3(如果(1(或

(2(对任何用户不成立,则用户正在从维护者生成的TAR或ZIP格式中提取软件包,该格式维护相关文件的时间戳,在这种情况下,配置生成的Makefile中的所有autotool/configure/Makefile.am/Makefile.in依赖项将在发出make命令之前得到满足。

第二个假设在许多Mac系统上都是失败的,因为automake.1.14是OSX的"最新"(至少这是我在MacPorts中看到的,显然对于brew也是如此(。

第三个假设在Github的世界里失败了。 这种失败是"每个人都认为自己是规范的"心态的一个例子;具体来说,维护者是唯一需要编辑 Makefile.am 的用户类,现在已经将每个人都归入该类。

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

侧边栏 II [为什么@kaz是对的]:当然,对我和其他同事来说,很明显,只需尝试一系列 [触摸] 命令来欺骗配置创建的 Makefile 重新运行配置和自动工具。 但这不是配置的重点;配置的目的是确保尽可能多的不同系统上的尽可能多的用户可以简单地执行[./configure && make]并继续前进;大多数用户对"剃掉牦牛"不感兴趣,例如调试Autotools开发人员的错误假设。

侧边栏III:可以说./configure,现在autotools添加了这些依赖项,是与Github分发的软件包一起使用的错误构建工具。

侧边栏 IV:也许基于配置的 Github 存储库应该将必要的触摸命令放入其自述文件中,例如 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"开头;以前你必须提供特定的版本/开发构建才能使其工作。

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

sudo apt-get install automake

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

使用此脚本安装最新的https://github.com/gp187/nginx-builder/blob/master/fix/aclocal.sh

> 2017 - High Sierra

在Mac上工作真的很难获得自动会议1.15。我们聘请了一位专家来让它工作。一切都很好。

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

码头工人管道停止工作!

即使自动conf 1.15在Mac上运行良好。

如何解决,

简短的回答,我只是丢弃了本地存储库,然后再次检查了存储库。

此建议在此 QA 页面和其他地方的组合中注明。

然后它工作正常!

它可能与aclocal.m4和类似文件有关。(但谁知道呢(。我无休止地按摩那些文件...但什么都没有。

出于某种未知原因,如果您只是刮擦回购并再次获取回购:一切正常!

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

如果使用 git 分发 autotools 项目,并且您负责分发它,那么在 configure.ac 文件中包含AM_MAINTAINER_MODE可能会有所帮助。这可以防止使用时间戳检查自动更新自动工具系统,从而防止此错误。

AM_MAINTAINER_MODE处于configure.ac时,默认情况下,维护者模式处于关闭状态,这对于正在构建项目的最终用户来说是可取的。如果AM_MAINTAINER_MODE(enable)处于 configure.ac 状态,则将使用相反的行为 - 并且默认情况下将启用维护者模式,从而重新引入此错误。

作为参考,您可以看到 binutils-gdb 存储库中如何使用AM_MAINTAINER_MODE

AC_INIT
AC_CONFIG_MACRO_DIRS([.. ../config])
AC_CONFIG_SRCDIR([main.c])
AC_CONFIG_HEADERS(config.h:config.in, [echo > stamp-h])
AM_MAINTAINER_MODE
AC_PROG_CC
AC_PROG_CXX
# snip

请注意,通过修改 configure.ac 您将需要在本地运行 autoreconf - 此答案仅适用于计算机上有 autotools,但不适用于您希望能够在其上构建的其他计算机。

相关: 如何防止自动工具自动生成配置脚本?

...我在Blender源代码上运行"make deps"时遇到了同样的错误,一个非常快速的解决方法是将您在我的OS 1.16上的版本复制到搜索的版本:sudo cp/usr/bin/aclocal-1.16/usr/bin/aclocal-1.15sudo cp/usr/bin/automake-1.16 usr/bin/automake-1.15

通过问题后(这里无法编译 flex(,我删除了副本:sudo rm/usr/bin/automake-1.15/usr/bin/aclocal-1.15

请注意,要编译Blender,您不应该"制作deps",而应该遵循例如uBuntu的说明 https://wiki.blender.org/wiki/Building_Blender/Linux/Ubuntu