gccの

2012-03-11 12 views
0

私はいくつかの.oファイルをリンクしようとしています:gccの

gcc -m32 send.o lib.o -o send 

と私が手:

/usr/bin/ld: i386:x86-64 architecture of input file `send.o' is incompatible with i386 output 
/usr/bin/ld: final link failed: Invalid operation 
collect2: ld returned 1 exit status 

私は のlibc6-i386の のgcc-multilibの IA32をインストールしています-lib

問題はどこですか?

答えて

2

あなたはコンパイルしていません。すでにコンパイルされたオブジェクトファイルをリンクしています。 send.oはx86_64オブジェクト(-m32なし)としてコンパイルされたようです。 32ビットのオブジェクトファイルから64ビットの実行ファイルをリンクすることはできません。

すべてのオブジェクトファイルが32ビットモードでコンパイルされていることを確認してください。

+0

申し訳ありませんが、私はそれらをリンクしています。私は-m32なしでも試しました。それは動作しません。ファイルはx86アーキテクチャ上でコンパイルされているはずです。 – yonutix

+0

したがって、lib.oはELF32です。これは64ビット出力と互換性がありません。 –

+0

-m32を使用せずにリンクすると、どのようなエラーメッセージが表示されますか? 'file send.o lib.o'の出力は何ですか? – Ray