web-dev-qa-db-ja.com

GCCコンパイル "オブジェクトファイルのサフィックスを計算できません:コンパイルできません"

私は実際にLFSブック(バージョン7.1)を読んでいて、53ページでブロックされています。gccをコンパイルしようとして、次のコマンドを試しました。

./configure --target=$LFS_TGT --prefix=$LFS/build/gcc-build --disable-nls\
--disable-shared --disable-multilib --disable-decimal-float --disable-threads\
--disable-libmudflap --disable-libssp --disable-libgomp --disable-libquadmath\
--disable-target-libiberty --disable-target-zlib\
--enable-languages=c\
--without-ppl --without-cloog\
--with-mpfr-include=$LFS/source/mpfr/src
--with-mpfr-lib=$LFS/source/mpfr/src/.libs\
--with-gmp-include=/mnt/LFS/source/gmp\
--with-gmp-lib=/mnt/LFS/source/gmp/.libs\
--with-mpc-include=/mnt/LFS/source/mpc/src\
--with-mpc-lib=/mnt/LFS/source/mpc/src/.libs

gccの構成スクリプトを実行します(もちろん、mpfr、mpc、gmpもコンパイル済みです)。しかし、私が起動したら:

make -j4

次のエラーが発生します。

checking for suffix of object files... configure: error: in `/mnt/LFS/source/gcc-4.6.2/x86_64-lfs-linux-gnu/libgcc':
configure: error: cannot compute suffix of object files: cannot compile
See `config.log' for more details.
make[1]: *** [configure-target-libgcc] Error 1

私はググってみて、見つけた解決策を試しましたが、何もうまくいきませんでした。このエラーが発生する理由を誰かが知っていますか?

25
E-Kami

この問題は、テストプログラムがlibmpc/libmpfr/libgmpに対してリンクしようとしたときの動的リンクライブラリパスの問題が原因で発生します。

以下の環境変数を追加して、正しいsoファイルに対してldリンクを許可します。

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/path/to/mpc/lib/

次に、gccのビルドを再試行します。

17
Fei

「* GCCのビルドは簡単ではありませんが、指示に注意深く従えば難しいことではありません。多くの人々は、インストールドキュメントを適切に読まずに次の1つ以上の一般的な間違いを犯してビルドしようと急いでいます:

1)gcc src dirから./configureを実行しないでください(これはサポートされていません)=> gccソースディレクトリの外部からconfigureを実行する必要があります

2)注:GCCが前提条件のライブラリー(GMP/MPFR/MPC)に動的にリンクする場合、gccのビルド時とインストールされたコンパイラーの使用時の両方で、共有ライブラリーは動的リンカーのパス(LD_LIBRARY_PATH)にある必要があります。

簡単な例(GMP/MPFR/MPCへの動的リンクなし):

tar xzf gcc-4.8.0.tar.gz
cd gcc-4.8.0
./contrib/download_prerequisites
cd ..
mkdir objdir
cd objdir
$PWD/../gcc-4.8.0/configure --prefix=/opt/gcc-4.8.0 
make
make install

出典: Advogato Doc - GNU Doc

12
Axel Borja

このエラーメッセージは、さまざまな理由から発生します。以下の例のログファイル「/home/manu/gcc/gcc/i686-pc-linux-gnu/libgcc/config.log」を確認するのがどれかを判断する最良の方法です。または、元のポスターのケースで「/mnt/LFS/source/gcc-4.6.2/x86_64-lfs-linux-gnu/libgcc」を使用して、最後のエラー行を探します。

GCC FAQの引用: http://gcc.gnu.org/wiki/FAQ#configure_suffix

GNUプロジェクトのいずれかと同様に、GCCはGNU autotoolsを使用して、ビルドシステムの詳細のコンパイルを一般的に構成します。構成スクリプトは、テストプログラム(通常はconftest.cと呼ばれる)は、特定の機能や機能が利用可能かどうかをテストします。このようなテストプログラムのコンパイルが失敗すると、次のようなエラーメッセージが表示されます。

 checking for suffix of object files... configure: error: in
 `/home/manu/gcc/gcc/i686-pc-linux-gnu/libgcc': configure: error:
 cannot compute suffix of object files: cannot compile See `config.log'
 for more details. make[2]: *** [configure-stage1-target-libgcc] Error
 1 make[2]: Leaving directory `/home/manu/gcc/gcc'

このエラーメッセージは誤解を招くものであり、多くの場合、問題はメッセージとは関係ありません。エラーが発生したディレクトリの「config.log」ファイルを確認する必要があります。上記の例では、ディレクトリ '/ home/manu/gcc/gcc/i686-pc-linux-gnu/libgcc'の 'config.log'ファイルを確認する必要があります。構成中に失敗したテストプログラムがいくつかある場合がありますが、これらの失敗のいくつかは重大ではありません。ファイルの最後のエラーエントリを確認します。

このエラーメッセージの一般的な原因は次のとおりです。

  • GCCビルドに必要なライブラリ、特にMPFR、GMPおよびMPCがありません。共有ライブラリとしてインストールする場合は、それらを見つけるために、実行時リンカーの検索パスになければなりません。回答の指示に従ってください。なぜ私の./configureは失敗しますか?

  • コンパイラがクラッシュしました。たとえば、「conftest.c:内部コンパイラエラー:」などのエラーがある場合、これはコンパイラのバグを示しています。変更されていないバージョンのGCCを使用している場合は、手順に従ってバグを報告してください。

4