-3

GCC 4.7.2 と OS X 64 ビットを使用しています。Ubuntu 32 ビットを使用している友人のために実行可能exeファイルを作成したいと考えています。main.cpp試してみまし$ g++ main.cpp -o exeたが、64ビット用にコンパイルしたため、機能しないと彼は言います。

どうすれば32ビット用にコンパイルできますか?

4

1 に答える 1

4

あなたの友人は間違っています。彼が 32 ビットのマシンを持っていて、あなたが 64 ビットの実行可能ファイルを作成したのは事実かもしれませんが、32 ビット用にコンパイルしたとしても (コンパイルし-m32て.動作しません。Mac OS X と Ubuntu は完全に異なるシステムであり、一方でコンパイルされたコードは他方では実行されません

GCC の 1 つのビルドは、1 つのターゲット、つまり CPU とオペレーティング システムの 1 つの組み合わせに対してのみコードを生成できます。システム上の GCC は、Mac OS X をターゲットにするように構築されています。つまり、ネイティブ コンパイラです。つまり、実行するシステムと同じシステム用のコードを生成します。

Ubuntu 用の実行可能ファイルを生成するには、GCC の別のビルドが必要です--target=i686-unknown-linux-gnu。その GCC が Mac で実行される場合、それはクロス コンパイラになります。つまり、あるシステムで実行されますが、別の種類のシステム用のコードが生成されます。

クロス コンパイラをインストールして使用するには、クロス ターゲット用のすべての C ライブラリも必要になるため、glibc ソースのコピーを取得し、クロス コンパイラを使用して Mac 上でビルドする必要があります。これはかなり複雑ですが、作業を行うためのスクリプトを提供することで単純化しようとするcrosstoolやなどのプロジェクトがあります。crosstool-NG

Mac に仮想マシンをセットアップし、VM に Ubuntu をインストールしてから、Ubuntu のネイティブ GCC を使用して Ubuntu の実行可能ファイルをコンパイルする方がはるかに簡単です。

apt-get install gcc友人が自分でソース コードをコンパイルしてコンパイルする方が簡単です。

于 2013-01-08T01:15:05.777 に答える