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/autoconfhttp://www.gnu.org/ software/m4 /http://www.Perl.org/ make:*** [aclocal.m4]エラー127
私はxcodeとg ++とcプログラムを実行するために必要なすべてのものを持っていますが、おそらく明らかなように、私はImが何をしているのか分かりません。
上記のリンクでプログラムを実行する最も簡単で簡単な方法は何ですか? READMEと使用例が付属していることがわかりますが、それを機能させることはできません。
./configure
を実行する前に、autoreconf -f -i
を実行してください。 autoreconfプログラムは、必要に応じてautoheader、aclocal、automake、autopoint、libtoolizeを自動的に実行します。
追加して編集:これは通常、.Zip
または.tar.gz
アーカイブからコードを抽出するのではなく、Gitからコードをチェックアウトすることにより発生します。ファイルが変更されたときに再構築をトリガーするために、Gitはファイルのタイムスタンプを保持しないため、configure
スクリプトは古くなっているように見える場合があります。他の人が述べたように、autoreconf
の十分に新しいバージョンがない場合、これを回避する方法があります。
別の編集:このエラーは、scpを使用してアーカイブから抽出されたソースフォルダーを別のマシンにコピーすることによっても発生します。タイムスタンプは更新でき、再構築が必要であることを示唆します。これを回避するには、アーカイブをコピーして所定の場所に抽出します。
多くの場合、auto*
ツールは必要ありません。最も簡単な解決策は、関連するフォルダーでtouch aclocal.m4 configure
を実行するだけです(また、Makefile.am
およびMakefile.in
が存在する場合はtouch
を実行します)。これにより、aclocal.m4
のタイムスタンプが更新され、aclocal.m4
が最新であり、再構築する必要がないことがシステムに通知されます。この後、おそらくbuild
ディレクトリを空にして、これを実行した後、configure
を最初から再実行するのがおそらく最善です。私はこの問題に定期的に遭遇します。私にとって、根本的な原因は、別のフォルダーからライブラリ(mpfr
のgcc
コードなど)をコピーし、タイムスタンプが変更されることです。
もちろん、これらのファイルを実際に再生成する必要がある場合、おそらく手動で変更したため、このトリックは無効です。しかし、うまくいけば、パッケージの開発者は最新のファイルを配布します。
そしてもちろん、automake
とその友達をインストールしたい場合は、ディストリビューションに適したパッケージマネージャーを使用してください。
Automakeに付属のaclocalをインストールします。
brew install automake # for Mac
apt-get install automake # for Ubuntu
再試行する:
./configure && make
この特定のケースに適用される場合と適用されない場合の一般的な回答:
エラーメッセージが示すように、aclocal-1.15は、aclocal.m4の生成に使用されたファイルを変更した場合にのみ必要です。
これらのファイル(configure.acを含む)のいずれも変更しない場合、aclocal-1.15は必要ありません。
私の場合、問題はこれらのファイルが変更されたことではなく、configure.acのタイムスタンプがaclocal.m4と比較して6分遅れていたことです。
理由はわかりませんが、gitリポジトリのクリーンクローンで問題が解決しました。たぶんgitにリンクされたものと、そもそもファイルがどのように作成されたか。
Autoconfと友人を再実行するのではなく、クリーンなクローンを取得して再試行してくださいにします。
また、誰かがconfigure.acに変更をコミットしたが、aclocal.m4を再生成しなかった可能性もあります。その場合、実際にはautomakeと友人を再実行する必要があります。
Autotoolsの目的は、最終的に./configure
というシェルスクリプトにコンパイルされる、不可解なM4マクロベースの言語を提供することです。このコンパイルされたシェルスクリプトをソースコードと共に出荷できます。そのスクリプトは、環境を検出し、プログラムをビルドする準備をするためにすべてを行う必要があります。 Autotoolsは、テストを微調整し、そのシェルスクリプトを更新したい人にのみ必要です。
GNU ThisおよびGNUが機能するためにシステムにインストールする必要がある場合、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
ShellコマンドがすべてのAuto-stuffプログラムに置き換わるように変更しました。
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=
コマンドラインには、Auto-stuffが呼び出されていた場所、true
コマンドが表示されています。これらは正常に終了したことを報告するため、そのジャンクを介して完全に構成されたダードビルドを実行します。
make gawk
を実行したのは、ビルドに失敗するサブディレクトリがいくつかあるためです。それぞれのMakefileに対してこのトリックを繰り返す必要があります。
開発者からのプログラムの純粋で公式なtarballでこの種の問題に遭遇した場合は、文句を言います。 ./configure
とmake
を展開するだけで、パッチを当てたり、AutomakeまたはAutoconfのマテリアルをインストールしたりする必要はありません。
理想的には、Gitヘッドのプルもそのように動作する必要があります。
https://github.com/apereo/mod_auth_cas/issues/97
一部のケースで単に実行中
$ autoreconf -f -i
そして他に何も....問題を解決しません。
それは/pcre2-10.30
ディレクトリで行います。
なんて悪夢だ。
(これは通常notでしたが、2017年に問題を解決しましたが、今では通常does問題を解決しているようです-彼らは何かを修正しました。また、Dockerfileは通常「FROM ibmcom/Swift-ubuntu」で始まるはずです。
必要なバージョンを簡単にインストールできます。
最初のソースを取得:
$ 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が呼び出されると、適切なバージョンが取得されます。
私はタッチコマンドが正しい答えだと思うのようなことをする
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 /Makefile.am/Makefile.in configureで生成されたMakefileの依存関係は、makeコマンドが発行される前に満たされます。
Automake.1.14はOSXの「最新」であるため、2番目の仮定は多くのMacシステムで失敗します(少なくともMacPortsで見られることであり、明らかにbrewでも同じです)。
3番目の仮定は、Githubのある世界では見事に失敗します。この失敗は、「誰もが彼らが規範的であると考える」という考え方の例です。特に、Makefile.amを編集する必要があるユーザーのonlyクラスであるメンテナーは、everyoneをそのクラス。
おそらく、これらの依存関係がMakefile.inやMakefileに追加されないようにするautowhateverのオプションがあります。
Sidebar II [なぜ@kazが正しいのか]:もちろん、私や他の認知者にとっては、一連の[touch]コマンドを試して、configureで作成されたMakefileをconfigureおよびautotoolsの再実行からだますのは簡単です。しかし、それは構成のポイントではありません。 configureのポイントは、できるだけ多くの異なるシステム上のできるだけ多くのユーザーが[./configure && make]を実行して先に進むことができるようにすることです。ほとんどのユーザーは「ヤクを剃る」ことに興味がありません。 autotools開発者の誤った仮定のデバッグ。
サイドバーIII:./configureは、autotoolsがこれらの依存関係を追加するようになったため、Githubで配布されるパッケージで使用するのに間違ったビルドツールであると主張できます。
サイドバーIV:おそらく構成ベースのGithubリポジトリは、必要なtouchコマンドをreadmeに入れるべきです。 https://github.com/drbitboy/Tycho2_SQLite_RTree 。
問題は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 をインストールします
Macでautoconf 1.15を動作させるのは本当に難しいです。それを機能させるために専門家を雇いました。すべてが美しく機能しました。
その後、たまたまMacをHigh Sierraにアップグレードしました。
Dockerパイプラインが機能しなくなった!
Autoconf 1.15 isはMacで正常に動作していますが。
直し方、
この提案は、このQAページや他の場所のミックスに記載されています。
それはそれからうまくいきました!
おそらく何かすることがありますaclocal.m4と同様のファイルで。 (しかし、本当に知っている人)。私はそれらのファイルを際限なくマッサージしましたが、何もしませんでした。
レポジトリをスクラッチしてレポジトリを再度取得する場合は、何らかの不明な理由により、すべてが機能します!
問題のファイルをタッチ/削除するなどのあらゆるコンボを何時間も試しましたが、ありません。レポを最初からチェックしてください!