2

http://crossgcc.rts-software.org/doku.php?id=i386linuxgccformacのファイルを使用してクロスコンパイラを作成しようとしています。

私はIntelMac(10.6.6、x86_64)を使用しています。コンパイルしました:クロスコンパイラ用のgmp、mpfr、mpcを32ビットとして(64ビットMacを使用しているため)、

ld: warning: option -s is obsolete and being ignored
ld: warning: ignoring file /gmp1/lib/libmpc.dylib, file was built for unsupported file format which is not the architecture being linked (i386)
ld: warning: ignoring file /gmp1/lib/libmpfr.dylib, file was built for unsupported file format which is not the architecture being linked (i386)
ld: warning: ignoring file /gmp1/lib/libgmp.dylib, file was built for unsupported file format which is not the architecture being linked (i386)

GCCをコンパイルする場合:

--prefix=/usr/local/i386-linux-4.5.2 --target=i386-linux --enable-languages=c --without-headers --disable-shared --disable-threads --disable-nls --with-gmp=/gmp1 --with-gmp-lib=/gmp1 --with-gmp-include=/gmp1 --with-mpfr=/gmp1 --with-mpfr-include=/gmp1 --with-mpfr-lib=/gmp1 --with-mpc=/gmp1 --with-mpc-lib=/gmp1 --with-mpc-include=/gmp1

また、GMPを次のコマンドでコンパイルした場合:

./configure --prefix=/gmp1 --host=i386-linux

私は得る:

configure: WARNING: +----------------------------------------------------------
configure: WARNING: | Cannot determine global symbol prefix.
configure: WARNING: | link -dump -symbols output doesn't contain a global data symbol.
configure: WARNING: | Will proceed with no underscore.
configure: WARNING: | If this is wrong then you'll get link errors referring
configure: WARNING: | to ___gmpn_add_n (note three underscores).
configure: WARNING: | In this case do a fresh build with an override,
configure: WARNING: |     ./configure gmp_cv_asm_underscore=yes
configure: WARNING: +----------------------------------------------------------
checking how to switch to read-only data section... .data
checking for assembler .type directive... 
checking for assembler .size directive... 
checking for assembler local label prefix... configure: WARNING: "link -dump -symbols" failure
configure: WARNING: cannot determine local label, using default L
L
checking for assembler byte directive... .byte
checking how to define a 32-bit word... link: illegal option -- d
4

2 に答える 2

6

どのパッケージをどのプラットフォーム用にコンパイルする必要があるかについて、あなたは混乱していると思います。

  • GCCは、x86_64MacOSXホストおよびi386-linuxターゲット用にコンパイルする必要があります。

  • GMP、MPC、およびMPFRは、GCCの実行時の依存関係です。したがって、GCCホスト(この場合はx86_64)用にコンパイルする必要もあります。したがって、--host=i386-linuxGMPconfigureコマンドのオプションは正しくありません。

一般に、GCCによってコンパイルされたプログラムでリンクされるライブラリのみが、クロスコンパイラターゲット(i386-linuxなど)用にビルドする必要があります。プログラムが実際にそれらを使用していない限り、GMPとMPFRはそのようなライブラリではありません。その場合、GCC用とターゲット用のクロスビルドの2つのライブラリのコピーが必要になります。

編集:

MacPortsの使用を検討しましたか?クロスコンパイラのすべての依存関係があります。

のための古いnewlibベースのクロスコンパイラもありi386ます:

これらを使用したくない場合でも、ポートファイルのビルド手順を確認できます。

結論は次のとおりです。

  • これらのライブラリに必要なパッチを適用します-MacPortsはすでにそれを行っています。

  • ビルドホスト、つまりMacOSX/x86_64のライブラリをコンパイルします。つまり、configure呼び出しのオプションでは、 (またはホストが必要とするものは何でも)--hostに沿ったものでなければなりません。--host=x86_64-darwinconfigureがそれ自体でホストを把握できる場合は、--hostオプションを完全にスキップできます。

  • ビルドホスト(64ビットMac OS X)およびi386-linuxのターゲットとしてGCCをコンパイルし--hostます。私があなたなら、CおよびC++言語専用のコンパイラーから始めます。--target=i386-linux

このチュートリアルも参照してください。適切なglibcを使用して機能するツールチェーンを作成する方法に関する情報があります。

とはいえ、さまざまな理由から、仮想マシンに適切なLinuxディストリビューションをインストールする方がよいと思います。特にクロスコンパイラが必要な理由はありますか?そのコンパイラで何をしたいですか?

于 2011-03-09T12:10:35.247 に答える
0

GMPのコンパイル時に「ABI=32」オプションを使用しましたか?そうでない場合は、ホスト/ターゲットがi386として指定されていても、64ビットコードを使用すると思います。

于 2011-03-08T04:14:53.817 に答える