私のホストは
:x86 32ビットプロセッサ私の
目標は:x86 64ビットプロセッサ
質問がいくつかあります:
- 私は利用可能なgccを使用してホスト上のプログラムを簡単にコンパイルし、ターゲットで実行できるかどうか疑問に思います。
- x86 64ビットプロセッサ用にクロスコンパイルする必要がありますか?それでは、コンパイル時にどのように指定しますか?
- プログラムをクロスコンパイルするには別のツールチェーンを使用する必要がありますか?
答え1
すべてのamd64(つまり64ビットx64)プロセッサは32ビットx86バイナリを実行できます。さらに、ほとんどのオペレーティングシステムでは、amd64オペレーティングシステムでx86プログラムを実行できます。したがって、x86バイナリは通常amd64プロセッサに配布できます。
あなたがそうする意思があるかどうかは別の問題です。 64ビットオペレーティングシステムには通常、32ビットライブラリの制限セットが付属しているため、プログラムが珍しいライブラリを使用している場合は、64ビット実行可能ファイルをインストールする方が簡単です。アプリケーションによっては、32ビットまたは64ビットバイナリのパフォーマンス上の利点がある場合とない場合があります。
64ビット実行可能ファイルをデプロイすることにした場合は、x86アーキテクチャで実行されるamd64(つまりx86_64)アーキテクチャ用のクロスコンパイル環境が必要です。これは、リンクするコンパイラと静的ライブラリを意味します。
gccインストールはフロントエンドを共有し、複数のバックエンドを含めることができます。しかし、x86プラットフォームではamd64開発ツールに付属しているディストリビューションはあまりありません。リンクするライブラリにも同様です(もちろん、コンパイラがあればソースから再コンパイルできます)。
たとえば、x86のUbuntu 10.04では、gccおよびamd64バックエンドの「multilib」バージョン、および小さな64ビット開発パッケージセット(libc6-dev-amd64 libc6-dev-amd64 http://bit.ly/software-smallのインストールと依存関係と依存パッケージ)。
答え2
はい、可能です。正しいコンパイラオプションを指定するだけです。 32ビットホストでは結果バイナリを実行できません。
次のものが必要だと思います。 CFLAGS=-m64 また、LD_LIBRARY_PATH および 64 ビットのヘッダーとライブラリーを依存関係と同様に設定する必要があります。
stackoverflowに質問がありますより多くの答えがあります。