1

automake 構成スクリプトを使用して、64 ビット CentOS システムで静的にリンクされた GNU x86 バイナリを構築しようとしています。静的 64 ビット バイナリと動的 32 ビットを問題なくビルドできますが、静的 32 ビット バイナリをビルドする方法がわかりません。

次のconfigureコマンドを試しました:

./configure --build=i686-pc-linux-gnu CFLAGS='-static -m32' CXXFLAGS='-static -m32'

しかし、次のエラー メッセージが表示されます。

# ./configure --build=i686-pc-linux-gnu CFLAGS='-static -m32' CXXFLAGS='-static -m32'
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for gawk... gawk
checking whether make sets $(MAKE)... yes
checking for g++... g++
checking whether the C++ compiler works... no
configure: error: in `/tmp/iperf-2.0.5':
configure: error: C++ compiler cannot create executables
See `config.log' for more details.

-m32 を CFLAGS、CXXFLAGS、および LDFLAGS に渡す 32 ビット バイナリだけをビルドしようとすると、正常に動作します。

config.log ファイルから、次のように表示されます。

configure:3104: $? = 1
configure:3124: checking whether the C++ compiler works
configure:3146: g++ -static -m32   conftest.cpp  >&5
/usr/bin/ld: cannot find -lstdc++
collect2: ld returned 1 exit status

しかし、libstdc++ の 32 ビット バージョンと 64 ビット バージョンの両方がインストールされています。

助言がありますか?

4

1 に答える 1

2

libtoolが統合されていると仮定して、典型的なautotoolsの設定については、以下を試してください。

> env CFLAGS="[OPT] -m32" CXXFLAGS="[OPT] -m32" \
  ./configure --host=i686-pc-linux-gnu --enable-static [--disable-shared]

OPT他のコンパイラフラグ、たとえば、-O2などはどこにありますか。

の明示的な使用は-static$CFLAGSおそらく$CXXFLAGSあなたが望むことをしていないでしょう。

編集:必要なモードをリンクステージに進めるには、実際には:CC="gcc -m32"、 (コンパイラによって異なります)を使用する必要がある場合があります。CXX="g++ -m32"私は以前に他のパッケージでこれに遭遇しました。

于 2012-12-08T11:17:34.893 に答える