我试图在github上运行一个c ++程序。 (可从以下链接https://github.com/mortehu/text-classifier获得)
我有一台mac,我正试图在终端上运行它。我想我已经下载了autoconf和automake,但我不确定。要运行程序,我将转到终端中正确的文件夹,然后运行
./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/制作:*** [aclocal.m4]错误127
我有xcode和g ++以及运行c程序所需的所有东西,但很明显,我不知道我在做什么。
在上述链接中运行程序最简单,最简单的方法是什么?我意识到它带有自述文件和示例用法,但我无法让它工作。
答案 0 :(得分:110)
在运行./configure
之前,请尝试运行autoreconf -f -i
。 autoreconf程序会根据需要自动运行autoheader,aclocal,automake,autopoint和libtoolize。
编辑以添加:这通常是通过从Git检出代码而不是从.zip
或.tar.gz
存档中提取代码引起的。为了在文件更改时触发重建,Git不保留文件'时间戳,因此configure
脚本可能看起来已过时。正如其他人所提到的,如果你没有autoreconf
的最新版本,有办法解决这个问题。
另一个编辑:将使用scp从存档中提取的源文件夹复制到另一台计算机也可能导致此错误。时间戳可以更新,表明需要重建。为避免这种情况,请复制存档并将其解压缩。
答案 1 :(得分:33)
通常,您不需要任何auto*
工具,最简单的解决方案就是在相关文件夹中运行touch aclocal.m4 configure
(并在{{1}上运行touch
}和Makefile.am
如果存在的话)。这将更新Makefile.in
的时间戳,并提醒系统aclocal.m4
是最新的,并且不需要重建。在此之后,最好清空aclocal.m4
目录并在执行此操作后从头开始重新运行build
。我经常遇到这个问题。对我来说,根本原因是我从另一个文件夹中复制了一个库(例如configure
mpfr
代码)并且时间戳发生了变化。
当然,如果您确实需要重新生成这些文件,这个技巧是无效的,可能是因为您手动更改了它们。但希望该软件包的开发人员能够分发最新的文件。
当然,如果您确实要安装gcc
和朋友,请使用适当的包管理器进行发布。
安装automake附带的aclocal:
automake
再试一次:
brew install automake # for Mac
apt-get install automake # for Ubuntu
答案 2 :(得分: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和朋友。
答案 3 :(得分:5)
Autotools的重点是提供一种基于M4宏的神秘语言,最终编译成一个名为./configure
的shell脚本。您可以使用源代码发送此编译的shell脚本,该脚本应该执行检测环境和准备构建程序的所有操作。只有那些想要调整测试并刷新shell脚本的人才需要Autotools。
如果必须在系统上安装GNU This和GNU,它才能使Autotools失败。最初,它的发明是为了简化将程序移植到各种Unix系统的过程,而这些系统无法在其上进行任何操作。甚至必须非常仔细地选择./configure
中生成的shell代码所使用的构造,以确保它们可以在几乎所有地方的每个破旧的shell上工作。
您遇到的问题是由于人们发明了一些简单的Makefile步骤,他们根本不了解Autotools的用途以及最终./configure
脚本的作用。
作为一种解决方法,您可以进入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的实际构建步骤不需要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=
命令行存在调用自动填充的位置,您可以在其中看到true
命令。这些报告成功终止,所以它只是通过垃圾来完成这个完美配置的darned构建。
我做了make gawk
因为有一些子目录被构建失败;必须为他们各自的Makefile重复这个技巧。
如果您正在使用其开发人员对该程序的原始官方压缩包进行此类操作,那么请抱怨。它应该只需解压缩./configure
和make
,而无需修改任何内容或安装任何Automake或Autoconf材料。
理想情况下,他们的Git头也应该这样。
答案 4 :(得分:4)
您可以轻松安装所需的版本:
首先获得来源:
$ 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时,你会得到正确的版本。
答案 5 :(得分:4)
https://github.com/apereo/mod_auth_cas/issues/97
在某些情况下只需运行
$ autoreconf -f -i
并没有别的......解决了这个问题。
您可以在/pcre2-10.30
目录中执行此操作。
真是个噩梦。
(这通常不在2017年解决问题,但现在通常 似乎解决了问题 - 他们修复了一些东西。而且,似乎你的Dockerfile现在应该通常以&#34; FROM ibmcom / swift-ubuntu&#34;开头;之前你必须提供某个版本/ dev-build才能使它工作。)
答案 6 :(得分:3)
我认为触摸命令是正确的答案,例如做点什么
touch --date="`date`" aclocal.m4 Makefile.am configure Makefile.in
&amp;&amp;使]。
补充工具栏I:否则,我同意@kaz:为aclocal.m4添加依赖项和/或configure和/或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是最新的&#34;对于OSX(至少这是我在MacPorts中看到的,显然对于brew也是如此)。
第三个假设在Github的世界里失败了。这种失败是一个例子,每个人都认为他们是规范性的。心态;具体来说,维护者是那些需要编辑Makefile.am的唯一类用户,现在已将所有人放入该类。
也许autow中有一个选项可以将这些依赖项添加到Makefile.in和/或Makefile中。
补充工具栏II [为什么@kaz是对的]:当然,对于我和其他认知来说,很明显只需尝试一系列[touch]命令来欺骗配置创建的Makefile,使其不再重新运行configure和autotools 。但这不是配置的重点;配置的目的是确保尽可能多的不同系统上的用户可以简单地做[./configure& amp ;& amp;继续;继续大多数用户对牦牛&#34;刮胡子不感兴趣。例如调试autotools开发人员的错误假设。
补充工具栏III:可以说./configure,现在autotools添加了这些依赖项,是与Github分布式软件包一起使用的错误构建工具。
侧栏IV:或许基于配置的Github repos应该将必要的触摸命令放入其自述文件中,例如: https://github.com/drbitboy/Tycho2_SQLite_RTree
答案 7 :(得分:2)
问题不在于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
答案 8 :(得分:1)
在Mac上运行autoconf 1.15真的很难。我们聘请了一位专家来使其发挥作用。一切都很美妙。
后来我碰巧将Mac升级到High Sierra。
Docker管道停止工作了!
即使autoconf 1.15 在Mac上运行良好。
如何修复,
这个建议在本QA页面和其他地方的混合中注明。
然后工作正常!
使用aclocal.m4和类似文件可能会有一些事情要做。 (但谁真的知道)。我无休止地按摩那些文件......但没有。
出于某种未知原因,如果你只是抓住你的回购并再次获得回购:一切正常!
我尝试了几个小时的触摸/删除等所有相关文件的组合,但没有。从头开始查看回购!