「システムに「aclocal-1.15」がありません」という警告を克服するにはどうすればよいですか?


85

githubでc ++プログラムを実行しようとしています。(次のリンクhttps://github.com/mortehu/text-classifierで入手可能)

Macを持っていて、ターミナルで実行しようとしています。autoconfとautomakeをダウンロードしたと思いますが、よくわかりません。プログラムを実行するには、ターミナルの正しいフォルダに移動してから実行します

./configure && make 

しかし、エラーが発生します:

警告:「aclocal-1.15」がシステムにありません。'acinclude.m4'または 'configure.ac'または 'configure.ac'に含まれるm4ファイルを変更した場合にのみ必要です。'aclocal'プログラムはGNUAutomakeパッケージの一部です: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プログラムを実行するために必要なすべてのものを持っていますが、おそらく明らかなように、私はImが何をしているのかわかりません。

上記のリンクでプログラムを実行する最も簡単で簡単な方法は何ですか?readmeと使用例が付属していることはわかっていますが、それを機能させることはできません。


1
あなたはからのautotools得ることができますbrewformulas.org/Automakeまたはlists.gnu.org/archive/html/automake/2007-05/msg00010.html
maddouri

1
「すべてのものは、Cプログラムを実行するために必要な」 -あなたはするすべてのものを必要とするコンパイルこの場合には、パッケージを含むプログラム、automakeautoconfm4、およびperlメッセージは非常に明確に述べて...「私はautoconfのをダウンロードしていると思いますが、とautomakeですが、よくわかりません」-少なくとも正しくインストールされていないことは間違いありません。;-)
DevSolar 2015年

回答:


168

実行する前に、実行して./configureみてくださいautoreconf -f -i。autoreconfプログラムは、必要に応じて、autoheader、aclocal、automake、autopoint、およびlibtoolizeを自動的に実行します。

編集して追加:これは通常、.zipまたは.tar.gzアーカイブからコードを抽出するのではなく、Gitからコードをチェックアウトすることによって発生します。ファイルが変更されたときに再構築をトリガーするために、Gitはファイルのタイムスタンプを保持しないため、 configureスクリプトが古くなっているように見える場合があります。他の人が述べているように、の十分に新しいバージョンがない場合、これを回避する方法がありますautoreconf

別の編集:このエラーは、scpを使用してアーカイブから抽出したソースフォルダーを別のマシンにコピーすることによっても発生する可能性があります。タイムスタンプは更新でき、再構築が必要であることを示しています。これを回避するには、アーカイブをコピーして所定の場所に抽出します。


Mortehuに感謝します!しかし、エラーが発生します:base / columnfile.cc:1からインクルードされたファイル:./ base / columnfile.h:8:10:致命的なエラー: 'kj /debug.h'ファイルが見つかりません#include <kj / debug .h>ファイルがありませんか?
リアム・フリン

1
はい、Cap'nProtoプロジェクトの一部であるlibkjがありません。libsnappyも必要です。
mortehu 2015年

さて、私はついに、構成、作成、およびインストールを行うために必要なすべてのツールを手に入れました。すべてが機能しているように見えますが、実行可能ファイルはどこに行きますか?これが重要か関連性があるかはわかりませんが、installを実行すると(はるかに大きなメッセージの一部として)次のメッセージが表示されます:#ターゲットではありません:install:#コマンドラインターゲット。#暗黙のルール検索は実行されていません。#変更時間はチェックされません。#ファイルは更新されていません。これは、出力ファイルが作成されないことを意味しますか?
リアム・フリン

プログラムは次のようになりtools/text-classifier/text-classifierます。なぜmake installうまくいかないのかわかりません。
mortehu 2015年

これは、プロジェクトで./configureを実行してから、automakeパッケージを更新した場合に発生する可能性があります
AlecIstomin19年

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」はおそらく古すぎます。...メイク:*** [てaclocal.m4]エラー63
リアム・フリン

そして、autoconf v2.69をインストールした後、次のようになります:libtool:バージョンの不一致エラー。これはlibtool2.4.2 Debian-2.4.2-1.11ですが、libtool:このLT_INITの定義はlibtool2.4.4からのものです。libtool:libtool 2.4.2 Debian-2.4.2-1.11 libtool:のマクロを使用してaclocal.m4を再作成し、autoconfを再度実行する必要があります。
リアム・フリン

完了したことを確認してからbrew install libtool、を実行してからaclocal、を実行しautoconfます。
emlai 2015年

libtoolを更新しましたが、次のようになります。libtool:バージョンの不一致エラー。これはlibtool2.4.2 Debian-2.4.2-1.11ですが、libtool:このLT_INITの定義はlibtool2.4.6からのものです。libtool:libtool 2.4.2 Debian-2.4.2-1.11 libtool:のマクロを使用してaclocal.m4を再作成し、autoconfを再度実行する必要があります。
リアム・フリン

これで問題は解決します。ただし、他の多くのもの(root権限、ネットワーク接続、新しいソフトウェア用のより多くのスペースなど)が必要なため、必要ありません。以下のDroopyconによる解決策は、「「acinclude.m4」または「configure.ac」または「configure.ac」に含まれるm4ファイルを変更した場合にのみ必要である」というエラーメッセージが明確に示されているため、(ほぼ)適切な答えです。 。
harihardik 2016年

11

必要なバージョンを簡単にインストールできます。

最初にソースを取得します。

$ 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インストーラーで「automake」を検索してバージョン11-1を選択してインストールしました。
justdan 2319年

8

この特定のケースに当てはまる場合と当てはまらない場合の一般的な回答:

エラーメッセージのヒントとして、aclocal-1.15は、aclocal.m4の生成に使用されたファイルを変更した場合にのみ必要です。

これらのファイル(configure.acを含む)を変更しない場合は、aclocal-1.15を使用する必要はありません。

私の場合、問題はこれらのファイルのいずれかが変更されたことではありませんでしたが、configure.acのタイムスタンプがaclocal.m4と比較して6分遅れていました。

理由はわかりませんが、gitリポジトリのクリーンなクローンで問題が解決しました。たぶん、gitにリンクされた何かと、そもそもそれがどのようにファイルを作成したか。

autoconfや友達を再実行するのではなく、クリーンなクローンを取得して再試行します。

誰かがconfigure.acに変更をコミットしたが、aclocal.m4を再生成しなかった可能性もあります。その場合、実際にautomakeとその友達を再実行する必要があります。


1
より適切な答え。squidが提供するtarからソースファイルを抽出しなかったため、同様のエラーが発生しました。代わりに、抽出済みのフォルダをコピーしましたが、ファイルのコピー順序が異なり、エラーが発生しました。tarから直接再抽出しただけで、動作し始めました。機会があれば、Droopyconによる解決策を適切な答えとしてマークします。
harihardik 2016年

鮮やかさ!以前はrsync、タイムスタンプを保持せずに、(圧縮されたソースアーカイブをコピーする代わりに)抽出済みのファイルをあるサーバーから別のサーバーにコピーしていました。代わりにソースアーカイブをコピーしてターゲットマシンに抽出したところ、問題は発生しませんでした。ありがとうございました!
ベンジョンソン

実際、多くの場合、答えは「レポを新鮮にチェックアウトする」です。素晴らしい答えと恵み!
Fattie 2017年

6

Autotoolsの要点は、最終的にはと呼ばれるシェルスクリプトにコンパイルされる難解なM4マクロベースの言語を提供すること./configureです。このコンパイル済みシェルスクリプトをソースコードと一緒に出荷できます。そのスクリプトは、環境を検出し、プログラムをビルドする準備をするためにすべてを実行する必要があります。Autotoolsは、テストを微調整してそのシェルスクリプトを更新したい人だけが必要とします。

GNUThisとGNUThatをシステムにインストールして動作させる必要がある場合は、Autotoolsのポイントが無効になります。もともとは、さまざまなUnixシステムへのプログラムの移植を簡素化するために発明されましたが、プログラムには何も含まれていませんでした。で生成されたシェルコードで使用される構造でさえ、./configure壊れた古いシェルのほぼすべてで機能するように、非常に慎重に選択する必要がありました。

あなたが直面している問題は、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すべてのAuto-stuffプログラムの代わりに無害なシェルコマンドを使用するように変更しました。

Gawkの実際のビルド手順には、自動スタッフは必要ありません。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に対して繰り返す必要があります。

開発者からのプログラムの手付かずの公式tarballでこの種のことに遭遇した場合は、文句を言います。それはちょうどアンパックすべき、./configuremakeあなたはどんなAutomakeのかAutoconfの材料を何もパッチまたはインストールすることなく。

理想的には、Gitヘッドを引っ張ってもそのように動作する必要があります。


なぜMakefileが壊れていると思いますか?emlaiの回答で指摘されているように、ビルドシステムは、生成されたファイルの依存関係が古くなっていることを認識します(これは、タイムスタンプがめちゃくちゃになっていて、touchそれらを修正できる場合のみです)。このシステムを作成した人は、それが何のために作成されたのか理解していないと言って(すべての依存関係で正しくビルドすることを保証します-変更された場合は-partsを含みますauto*)、Makefileを変更してこれを完全に実行しないようにしますもっと...間違っているようです。
サイモンソビッシュ2017

@SimonSobischこの問題が発生していて、答えを使用できませんか?
kaz 2017

尋ねていただきありがとうございます。いいえ、私はこの問題を抱えていませんが、あなたの投稿を読むと、「このエラーは、Makefileが壊れているために発生し、Makefileが本来あるべきものではないために発生します」-Makefileが正確に実行している間(必要なファイルを再構築する)同じルールに従って再構築するには、オブジェクトファイルはCソースから再構築されます)。ほとんどの場合、エラーは、必要なツールなしで非遠隔パッケージを使用するか、ソースからのタイムスタンプが「作成者に不平を言う」ために壊れているために発生します。
サイモンソビッシュ2017

私は思います決してにツールを変更することをお勧めしませんtrue。「タイムスタンプが原因で」壊れている部分を本当に修正したい場合はmake --touch、失敗したターゲットに対して実行する方が適切です(それらを収集したい場合make --keep-goingは、事前に「壊れた」部分のリストを取得するために実行します)。
サイモンソビッシュ2017

@SimonSobisch素晴らしい提案。そこに別の答えの始まりがあるように聞こえます。この場合、ツールをに変更するtrueことは、これらのツールがプログラムのビルドに不要であるという事実によって合理的に正当化されますが、configureスクリプトを再構築するだけであり、スクリプトはすでにビルド済みの形式で利用可能です。タイムスタンプをタッチしてツールの実行試行を抑制すると、同じ効果が得られます。
kaz

4

タッチコマンドが正しい答えだと思います。

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

[./configure && make]の前。

補足I:それ以外の場合は、@ kazに同意します。aclocal.m4および/またはconfigureおよび/またはMakefile.amおよび/またはMakefile.inの依存関係を追加すると、ターゲットシステムについて無効である可能性があると想定されます。具体的には、それらの仮定は

1)すべてのターゲットシステムにautotoolsがあり、

2)すべてのターゲットシステムに同じバージョンのautotools(この場合はautomake.1.15など)があること。

3)(1)または(2)のいずれかがどのユーザーにも当てはまらない場合、そのユーザーは、関連ファイルのタイムスタンプを維持するメンテナが作成したTARまたはZIP形式からパッケージを抽出していること。この場合、すべてのautotool / configure configureで生成されたMakefileの/Makefile.am/Makefile.in依存関係は、makeコマンドが発行されるに満たされます。

automake.1.14はOSXの「最新」であるため、2番目の仮定は多くのMacシステムで失敗します(少なくともMacPortsで見られるものであり、brewについても同じことが明らかに当てはまります)。

3番目の仮定は、Githubのある世界では見事に失敗します。この失敗は、「誰もが自分たちが規範的だと思っている」という考え方の一例です。具体的には、Makefile.amを編集する必要がある唯一のユーザークラスであるメンテナが、全員をそのクラスに入れました。

おそらく、autowhateverには、これらの依存関係がMakefile.inやMakefileに追加されないようにするオプションがあります。

サイドバーII [@kazが正しい理由]:もちろん、私や他の認識者にとっては、configureとautotoolsの再実行からconfigureで作成されたMakefileをだますために一連の[touch]コマンドを試すことは明らかです。しかし、それは設定のポイントではありません。configureのポイントは、できるだけ多くの異なるシステム上の多くのユーザーが[./configure && make]を実行して先に進むことができるようにすることです。ほとんどのユーザーは、autotools開発者の誤った仮定のデバッグなどの「ヤクを剃る」ことに興味がありません。

サイドバーIII:./ configureは、autotoolsがこれらの依存関係を追加するようになったため、Github配布パッケージで使用するのに間違ったビルドツールであると主張することができます。

サイドバーIV:おそらく構成ベースのGithubリポジトリは、必要なtouchコマンドをreadmeに配置する必要があります(例: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は通常「FROMibmcom / swift-ubuntu」で始まる必要があるようです;以前はそれを機能させるための特定のバージョン/ dev-build。)



0

2017-ハイシエラ

Macでautoconf1.15を動作させるのは本当に難しいです。私たちはそれを機能させるために専門家を雇いました。すべてが美しく機能しました。

その後、たまたまMacをHighSierraにアップグレードしました。

Dockerパイプラインが機能しなくなりました!

autoconf1.15Macでは正常に機能していますが。

直し方、

簡単に言うと、ローカルリポジトリをゴミ箱に移動して、リポジトリをもう一度チェックアウトしました。

この提案は、このQAページおよび他の場所のミックスに記載されています。

その後、正常に動作しました。

aclocal.m4や同様のファイルと関係がある可能性があります。(しかし、誰が本当に知っていますか)。私はそれらのファイルを際限なくマッサージしました...しかし何も。

なんらかの理由で、レポをスクラッチして再度レポを取得した場合、すべてが機能します。

問題のファイルのタッチ/削除などのすべての組み合わせを何時間も試しましたが、できませんでした。リポジトリを最初からチェックしてください!


automakeリポジトリをチェックアウト状態に戻すには、「makedistclean」を実行します。
Frederick Ollinger 2017

技術的には、gitコマンドではありません。./configureの後にリポジトリをクリーンアップすることです。つまり、それはautomakeの一部です。ただし、automakeを使用するすべてのgitリポジトリで機能するはずです。
Frederick Ollinger 2017

gotchya、それは素晴らしいヒントのように聞こえます。
Fattie 2017

「Macでautoconf1.15を動作させるのは本当に難しいです。動作させるためにUltra-Expertを雇いました...」 -これは、このツールチェーンがいかに壊れているかを示しています。そして悲しいことに、20年以上の間、それは修正されていません。それを修正しないことは私が例外とすることです。人々がそれを使用できないようにそれを壊したままにすることはどのような目的に役立ちますか?
JWW
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.