2012-04-16 10 views
0

私はクランコンパイラでCプログラムをコンパイルしようとすると、私はこのメッセージ私はこの問題を解決するにはどうすればよいクランリンカーおよびi686の

/usr/bin/ld: i386:x86-64 architecture of input file `/usr/lib/gcc/i686-linux-gnu/4.6.1/../../../../lib/crt1.o' is incompatible with i386 output 
/usr/bin/ld: i386:x86-64 architecture of input file `/usr/lib/gcc/i686-linux-gnu/4.6.1/../../../../lib/crti.o' is incompatible with i386 output 
/usr/bin/ld: i386:x86-64 architecture of input file `/usr/lib/gcc/i686-linux-gnu/4.6.1/../../../../lib/crtn.o' is incompatible with i386 output 
clang: error: linker command failed with exit code 1 (use -v to see invocation) 

を取得しますか? それが重要な場合:

$ uname -a 
Linux asus 3.0.0-17-generiC#30-Ubuntu SMP Thu Mar 8 17:34:21 UTC 2012 i686 i686 i386 GNU/Linux 
+0

これは珍しいことです。あなたは32ビットシステムを持っていますが、あなたのライブラリは64ビットですか?ソースから自分でライブラリをインストールしましたか? – trojanfoe

+0

Ubuntu 11.10にアップグレードした後、32ビットライブラリが64ビットに置き換えられました –

+0

しかし、カーネルはありませんでしたか?私はあなたのシステムが壊れていると思う。 – trojanfoe

答えて

0

打ち鳴らすコンパイラは、基本的に問題のソースコードは(また、AMD64および'64ビットプロセッサ」として知られている)のx86-64 プロセッサの拡張機能を使用しているが、あなたがしようとしていることを語っていますi386アーキテクチャーだけを使用しないでください。i386アーキテクチャーは、i [456] 86}でも使用されています(拡張されています)。これは32ビットプロセッサーのデフォルトです。 ほとんどの場合、コンパイルしようとしているソフトウェアのバージョン(64ビットと意図した32ビット)が正しくダウンロードされていません。

+0

int main(){return 0;}のような基本的なプログラムをコンパイルしようとしています。 –

0

64ビットライブラリと32ビットライブラリをリンクしています。そのミキシングはエラーを作り出します。 Linuxでは "objdump"コマンドでアーキテクチャをチェックし、Windowsでは依存関係ウォーカーを使用することができます。私も同じ問題に直面しています。 linuxを使用している場合は、-m32の代わりに-m64コマンドを使用して変更する必要があります。 -m64コマンドは64ビットライブラリをビルドするコマンドで、-m32は32ビットライブラリをビルドするコマンドです。