在ac-aux中找不到install-sh,install.sh或shtool


81

这是我第一次尝试在Linux机器上编译并安装任何东西。我通过git 获得了最新版本的https://github.com/processone/exmpp并阅读了以下说明:

2.构建并安装

Exmpp使用自动工具。因此,该过程非常普遍:

$ ./configure
$ make
$ sudo make install

输入后./configure出现错误

在ac-aux中找不到install-sh,install.sh或shtool

Google几乎没有帮助。完全不确定我应该做什么。任何帮助将非常感激

Answers:


109

我使用以下工具来创建配置脚本:

libtoolize --force
aclocal
autoheader
automake --force-missing --add-missing
autoconf
./configure

我没有所有的依赖关系,因此我现在无法对其进行测试,但这通常是您从ac文件创建配置脚本的方式。


2
自述文件中的说明可能是从其他地方盲目复制的。我不得不承认,我不了解autoconf工具链的每一个细节。它基本上是一个宏的集合,这些宏已生成并用于创建您的配置脚本(从而为编译和安装过程奠定了基础)。我从来没有微调这些东西,所以我不是专家,但也有一些相当广泛的解释这里
sebastian_k

12
程序员注意:请停止使用automake工具链。
Qix

1
@Qix,能否请您解释一下为什么?
谢尔盖

4
@Sergei混乱,缓慢且不断中断。它杂波了定义并是令人难以置信的神奇。它处理依赖关系(或缺少依赖关系)的方式会给出错误的错误消息,并且它生成的文件充其量是不可读的,而在最坏的情况下,它会被噩梦般地破坏。
Qix

4
在我看来,@ Sergei CMake是目前最可行的。我敢肯定,(不久的将来)会有更好的事情。
Qix

40

好吧,我尝试了sebastian_k的答案,但对我却不起作用(./configure中途崩溃,出现一个非常奇怪的错误)。

是怎么做的,但是对我有用的是复制我发现的构建日志中使用的说明

简短的版本(因此您不必自己遍历)是:

$ autoreconf -vif
$ ./configure --prefix=/usr/lib/erlang/lib
$ make
$ sudo make install

16
+1。autoreconf -i是正确答案(the vf通常是可选的)
Nemo

2
+1。这是唯一对我有用的答案。
weberc2

@Nemo不错。公认的答案在技术上是可行的,但您的答案到目前为止是最简单的。
Avindra Goolcharan

9

这个问题以及此处的大多数其他答案是由于对使用GNU Build System(又名Autotools)的项目如何分布的误解引起的。实际上,对于OP提到的Erlang XMPP库,这种误解似乎是开发人员的责任。

以正确的方式获得软件

如果您要做的只是编译并安装随GNU Autotools发布的项目,则不应从源代码控制系统中检出它。您应该下载开发人员提供的打包的源发行版。这些通常采用在项目网站上分发的压缩包的形式。对于完全托管在GitHub,Savannah或某些类似托管服务上的项目,通常会在一些标记为“下载”或“发布”的链接后面找到这些tarball。打开包装,说出标准./configure && make && sudo make install咒语的一些变体。就这样; 您不需要调用任何GNU Autotools,甚至不需要在系统上安装GNU Autotools。

用户(您)不需要GNU Autotools来编译Autotools打包的项目的原因是,开发人员已经使用了各种Autotools程序来生成“发行包”,该发行包可用于在任何平台上构建软件。类似Unix的系统。发行版tarball包含一个高度可移植的configure脚本,该脚本可扫描构建环境,检查相关性并Makefile为您的系统构建定制的脚本。

那么什么时候需要Autotools?

您需要自行安装和调用GNU Autotools的唯一原因是,如果您要在使用Autotools构建的项目上进行开发工作。即使那样,除非您更改项目的依赖关系,否则您可能仍不需要Autotools。在那种情况下,您确实确实需要检出原始源文件configure.ac,对Autotools专用的输入文件(Makefile.am,等)进行适当的更改,然后在它们上运行Autotools以生成新configure文件。如果要独立发布修订的程序包,则可以使用Autotools生成的Makefile生成新的发行版tarball,然后将该tarball在线发布。

问题在于,一些开发人员将其源代码库公开可用,但忽略了发布发行包(或使其很难找到发布位置)。例如,而不是发布其分布压缩包为GitHub上发布,在二郎XMPP库的GitHub上发布的原始源代码库的压缩包。如果没有GNU Autotools,就不可能编译项目,从而一开始就破坏了使用Autotools的全部目的。

TL; DR摘要

GNU Autotools是开发人员用来为用户制作可移植源代码包的工具。 用户应从这些源程序包而不是源代码控制系统中的原始代码下载并编译。如果开发人员不提供这些源代码包,则说明他们没有正确使用Autotools,应该用湿鳟鱼轻轻拍打他们,直到看到自己的方式错误为止。


这篇漫长的帖子与这个问题有什么关系?OP是否尝试使用自动工具?他们下载了一些软件,然后./configure && make && sudo make install按照第二段中的建议运行。
飞行员

3
这是相关的,因为OP下载的软件不包含正确的配置脚本(并且源代码管理中的最新版本以及已发布的tarball根本不包含配置脚本)。这里几乎所有的答案都告诉OP运行Autotools。尽管这可能会解决问题,但重要的是要了解根本原因:开发人员是负责运行Autotools的人,他们没有正确(或根本没有正确地执行此操作)。
Psychonaut

1
这是一个很好的答案,尽管我喜欢短语“用湿鳟鱼拍打”,但明确提到正确的答案是报告上游的错误可能更合适。
William Pursell '17

1
@WilliamPursell我认为它是双关语。:)
Psychonaut

4

我遇到了这个问题,发现原因是由于以下行configure.ac

AC_CONFIG_AUX_DIR([build-aux])

该行本身还不错,但是需要将其移到configure.ac文件顶部附近。


3

请执行以下操作解决此问题,

sudo apt-get install autogen libtool shtool

然后进行安装

sh autogen.sh --prefix=prefered_install_path
make 
make install 

2

尝试从Mercurial存储库编译GNU Octave时,您可能会遇到此问题。该修补程序./bootstrap将在源树的根目录中运行。



0

当我尝试获取./configure源代码并遇到与发布相同的错误时,我遇到了类似的问题。最后通过输入代码解决了我的问题:

sudo apt-get install autotools-dev

2
错误:无法找到软件包自动工具。
Mauricio Scheffer 2014年

同样在这里。错误:无法找到软件包自动工具。不赞成投票。抱歉。
2015年

我已经安装了该软件包,无论它是什么。尽管如此,配置脚本还是很烂。
Boann

0

安装autogen软件包后,此错误已在wolfSSL构建中解决。

sudo apt-get install autogen libtool shtool

0

我有稍微不同的错误:

configure: error: cannot find install-sh, install.sh, or shtool in "." "./.." "./../.."

事实证明configure找不到build-aux/install-sh。我这样链接

ln -s build-aux/install-sh .

然后建立。

希望能帮助到那里的人!

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.