質問
X86_64がホストであり、I386がターゲットであるクロスコンパイラを構築しようとしています。私は(すべてが一般的に)CRTI.Oを取得しています:そのようなファイルエラーはありません。既に構築されたCRTI.OとCRTN.Oをディストリビューションからつかむ代わりに...これらのファイルをGLIBC(またはGCC)ソースから明示的に構築するにはどうすればよいですか?
参考までに、X86_64コンパイラの-M32オプションをよく知っています。 32ビットのみのコンパイラ環境が欲しいです。また、既にビルドI386コンパイラを使用したくない理由は、テストのニーズに応じて、GlibC/Binutils/GCCバージョンの混合とマッチングを計画しているためです。
ありがとう、チェンツ
解決
クロスコンパイルの構成を正しく使用しているのですか?そのはず
CBUILD = CHOST = x86_64-pc-linux-gnu CTARGET = i386-pc-linux-gnu
あなたがanでビルドを実行しているとき x86_64
, 、コンパイラがanで実行するため x86_64
, 、anのコードを生成します i386
.
使用した場合 CHOST = i386-pc-linux-gnu
, 、32ビットのバイナリを生成しようとします。これは32ビットにリンクする必要があります libc
. 。あなたがすでに32ビットを持っているなら、これは問題ありません libc
, 、しかし、そうしないように聞こえます。
すなわち
$ tar xvjf gcc-*.tar.bz2 $ cd gcc-*/ $ mkdir build $ cd build $ ../configure --build=x86_64-pc-linux-gnu --host=x86_64-pc-linux-gnu --target=i386-pc-linux-gnu
他のヒント
1つの可能性があります(from ここ)
ディストリビューションの32ビットLIBC-DEVパッケージをインストールする必要があります。または、32ビットモードをサポートしないコンパイラになる-isable-multilibが必要です。
所属していません StackOverflow