2012-04-16 60 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 2012-04-16 14:08:40

+0

升級到Ubuntu 11.10 – 2012-04-16 14:41:37

+0

後,32位庫被替換爲64位但內核不是?我認爲你的系統壞了。 – trojanfoe 2012-04-16 14:46:25

回答

0

鐺編譯器實質上是告訴有問題的源代碼使用X86-64 處理器擴展(也稱爲AMD64和'64位處理器「),但你想不要{即只使用也由i使用(並擴展)的i386體系結構)。這是32位處理器上的默認設置。 最有可能的是,您下載了試圖編譯的軟件的錯誤版本(64位與預期的32位)。

+0

我試圖編譯一個像main(){return 0;}這樣的基本程序。 – 2012-04-16 14:42:00

0

您正在將64位庫與32位庫鏈接。這種混合造成了錯誤。您可以通過「objdump」命令在linux中檢查體系結構,並且可以使用依賴項walker檢查Windows。我也面臨同樣的問題。如果您正在使用linux,則應使用-m64命令而不是-m32來修改它。 -m64命令用於構建64位庫,-m32用於構建32位庫。