如何克服“系统上缺少'aclocal-1.15'”警告?


82

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

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

./configure && make 

但是我得到了错误:

警告:您的系统上缺少'aclocal-1.15'。仅当您修改了“ config.ac”包含的“ acinclude.m4”或“ 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程序所需的所有东西,但是很明显,我不知道我在做什么。

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



1
“所需的所有东西运行C程序” -你需要所有的事情编译程序,在这种情况下,包括包装automakeautoconfm4,和perl,因为消息很清楚地指出“我觉得我已经下载的autoconf和自动制作,但不确定” –我很确定您至少没有正确安装它。;-)
DevSolar 2015年

Answers:


161

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

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

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


谢谢Mortehu!但是我得到了错误:在base / columnfile.cc:1包含的文件中:./base/columnfile.h:8:10:致命错误:找不到'kj / debug.h'文件#include <kj / debug .h>我丢失文件了吗?
Liam Flynn

1
是的,您缺少libkj,它是Cap'n Proto项目的一部分。您还需要libsnappy。
mortehu 2015年

好的,我终于有了配置,进行安装的所有必要工具。看来一切正常,但是可执行文件在哪里呢?不知道这是重要的还是相关的,但是当我进行install时,会得到以下消息(作为更大消息的一部分):#不是目标:install:#命令行目标。#隐式规则搜索尚未完成。#修改时间从未检查过。#文件尚未更新。这是否意味着没有创建输出文件?
Liam Flynn

该程序应以结束tools/text-classifier/text-classifier。我不知道为什么make install不起作用。
mortehu

如果您在项目中运行./configure然后更新automake软件包,则可能会发生这种情况
Alec Istomin 19'Apr

52

通常情况下,你不需要任何auto*工具和简单的解决方法是简单地运行touch aclocal.m4 configure在相关文件夹(也运行touchMakefile.amMakefile.in如果它们存在)。这将更新的时间戳,aclocal.m4并提醒系统aclocal.m4是最新的并且不需要重建。之后,最好清空build目录,然后再configure从头开始运行。我经常遇到这个问题。对我来说,根本原因是我从另一个文件夹复制了一个库(例如的mpfr代码gcc),并且时间戳发生了变化。

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


当然,如果您确实想automake与朋友安装,那么请使用适当的软件包管理器进行分发。


安装automake随附的aclocal:

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

再试一次:

./configure && make 

完成后,我得到:configure.ac:25:错误:需要Autoconf版本2.69或更高版本。警告:'aclocal-1.15'可能太旧了。... make:*** [aclocal.m4]错误63
Liam Flynn

然后安装autoconf v2.69之后,我得到:libtool:版本不匹配错误。这是libtool 2.4.2 Debian-2.4.2-1.11,但是此LT_INIT的libtool:定义来自libtool 2.4.4。libtool:您应该使用libtool 2.4.2 Debian-2.4.2-1.11 libtool:中的宏重新创建aclocal.m4,然后再次运行autoconf。
利亚姆·弗林

确保已完成操作brew install libtool,然后运行aclocal,然后运行autoconf
埃莱2015年

我更新了libtool,但现在得到:libtool:版本不匹配错误。这是libtool 2.4.2 Debian-2.4.2-1.11,但是此LT_INIT的libtool:定义来自libtool 2.4.6。libtool:您应该使用libtool 2.4.2 Debian-2.4.2-1.11 libtool:中的宏重新创建aclocal.m4,然后再次运行autoconf。
利亚姆·弗林

这样就解决了问题。但这不是必需的,因为它还需要其他许多条件(root特权,网络连接,更多的新软件空间等)。下面的Droopycon解决方案是一个(正确的)答案,因为错误消息明确指出:“只有在修改了'configure.ac'包含的'acinclude.m4'或'configure.ac'或m4文件时,才需要使用它。” 。
哈里哈迪克

10

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

首先获取来源:

$ 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”。我通过CygWin的UI Installer通过搜索“ automake”并选择版本11-1来安装它。
justdan23 '19

8

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

作为错误消息提示,仅当您修改了用于生成aclocal.m4的文件时,才需要aclocal-1.15

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

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

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

我不会尝试重新运行autoconf和朋友,而是尝试获取干净的克隆并重试

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


1
更合适的答案。我收到类似的错误,因为我没有从squid提供的tar中提取源文件。相反,我复制了已经提取的文件夹,并且复制文件的顺序不同,这导致了错误。我只是直接从tar中重新提取并开始工作。如果有机会,我会给Droopycon解决方案打上正确的答案。
harihardik '16

辉煌!我曾经rsync将已经提取的文件从一台服务器复制到另一台服务器(而不是复制压缩的源档案),而没有保留时间戳。当我改为复制源档案并将其提取到目标计算机上时,没有发生此问题。谢谢!
本·约翰逊

实际上,答案通常是“签出最新的回购协议”。神奇的答案和赏金!
Fattie

6

Autotools的全部重点是提供一种基于M4宏的奥秘语言,最终将其编译为名为的Shell脚本./configure。您可以将此编译后的Shell脚本与源代码一起提供,并且该脚本应执行所有操作以检测环境并准备要构建的程序。只有要调整测试并刷新该Shell脚本的人员才需要使用自动工具。

如果必须在系统上安装GNU This和GNU That才能使用Autotools的观点。最初,它是为了简化程序到各种Unix系统的移植而发明的,不能指望它们上有任何东西。即使生成的shell代码使用的结构./configure也必须非常仔细地选择,以确保它们可以在几乎任何地方都可以在每个损坏的旧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@

基本上,我进行了更改,以便将无害的trueshell命令替换为所有Auto-stuff程序。

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头的行为也应如此。


为什么您认为Makefile文件已损坏?正如emlai的答案中指出的那样,构建系统认识到生成文件的依赖关系已经过时了(这可能只是拧紧的时间戳记,可以通过touch对其进行修复来解决)。话说创建这个系统的人不明白这是什么的(确保你建立正确的用所有的依赖-这创造包括auto*如果他们改变了-零件),并改变Makefile文件,有效地不这样做完全的任何似乎更多...错了。
西蒙·索比斯

@SimonSobisch您遇到此问题并且无法使用答案吗?
卡兹(Kaz)

谢谢你的慰问。不,我没有这个问题,但是通过阅读您的帖子,我看到了底线:“发生此错误是因为Makefile损坏了,而不是Makefile应该是什么。”-而Makefile正是在执行应做的事情(重建需要的文件按照相同的规则重建目标文件,可以从C源代码重建目标文件)。在大多数情况下,发生错误是因为人们使用的是非dist软件包,而没有必要的工具,或者来源中的时间戳被“投诉作者”。
西蒙·索比斯

绝不建议将工具更改为true。如果您真的想修复由于“时间戳记”而破损的部分更好地make --touch针对失败的目标运行(如果要收集它们make --keep-going,则可以事先获取“破损”部分的列表)。
西蒙·索比什

@SimonSobisch很棒的建议;听起来您在那里有了一个单独答案的开始。在这种情况下,将这些工具更改true为的理由是合理的,因为这些工具对于构建程序来说是不必要的,而对于重新构建configure脚本(它已经以预构建的形式提供)是不必要的。触摸时间戳以抑制尝试运行工具的效果相同。
卡兹(Kaz)2009年

4

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

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

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

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

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

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

3)如果(1)或(2)对任何用户都不正确,则该用户正在从维护者生产的TAR或ZIP格式提取软件包,该格式维护相关文件的时间戳,在这种情况下,所有自动工具/配置在发出make命令之前,将满足configure生成的Makefile中的/Makefile.am/Makefile.in依赖性。

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

在Github的世界中,第三个假设严重失败。这种失败是“每个人都认为他们是规范性”思维方式的一个例子。具体来说,维护人员是唯一需要编辑Makefile.am的用户类别,现在他们把所有人都纳入了该类别。

可能在autowhathat中有一个选项可以阻止将这些依赖项添加到Makefile.in和/或Makefile中。

补充工具栏II [为什么@kaz是正确的]:对于我和其他同僚来说,当然很明显,只需尝试一系列[touch]命令来欺骗重新运行configure和autotools创建的Makefile。但这不是配置的重点。配置的重点是确保在尽可能多的不同系统上的尽可能多的用户可以简单地[./configure && make]并继续进行操作;大多数用户对“节省the牛”不感兴趣,例如调试自动工具开发人员的错误假设。

补充工具栏III:现在自动工具添加了这些依赖关系,。/ configure可能是与Github分布式软件包一起使用的错误构建工具。

补充工具栏IV:也许基于配置的Github存储库应该将必要的touch命令放入其自述文件中,例如https://github.com/drbitboy/Tycho2_SQLite_RTree


4

2018年,另一个解决方案...

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

某些情况下只是运行

$ autoreconf -f -i

没有其他......解决了这个问题。

您可以在目录中执行此操作/pcre2-10.30

什么样的恶梦。

(这通常并没有解决这个问题在2017年,但现在一般不会似乎来解决这个问题-他们固定的东西而且,看来你Dockerfile现在应该通常以“FROM ibmcom /快捷Ubuntu的”开始;以前你不得不放弃。某个版本/ dev-build以使其正常工作。)



0

2017年-高山脉

在Mac上,很难使autoconf 1.15正常工作。我们聘请了一位专家来使其正常运转。一切正常。

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

Docker管道停止工作!

虽然autoconf的1.15在Mac上工作正常。

怎么修,

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

此建议在此质量检查页和其他位置的混合中已注意到。

然后工作正常!

它可能与aclocal.m4和类似文件有关。(但是谁真的知道)。我无休止地按摩了那些文件……但是什么也没有。

出于某种未知的原因,如果您只是刮下您的存储库并再次获得该存储库,那么一切正常!

我尝试了每个小时的接触/删除等组合的问题,等等文件,但没有。只需从头开始查看仓库即可!


要使自动制作回购返回到其签出状态,您可以执行:“ make distclean”。
Frederick Ollinger '17

从技术上讲,它不是git命令。它是在./configure之后清理存储库。因此,这是自动制作的一部分。但是它应该可以在任何使用automake的git仓库上运行。
弗雷德里克·奥林格

哥奇亚,听起来像个绝妙的秘诀。
Fattie

“要使autoconf 1.15在Mac上运行真的很困难。我们雇用了Ultra-Expert使它运行……” -这告诉我们该工具链有多严重。可悲的是,在20多年的时间里,这个问题还没有得到解决。我不赞成对此事进行修复。它有什么目的才能使它破裂而使人们无法使用它?
jww
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.