2008-10-19 38 views
29

我試圖編譯一個使用外部編譯對象coreset.o的程序。我寫了public01.c測試文件,我的函數在comput.c中,兩者都編譯。然而它沒有把它連接在一起。可能是什麼問題?gcc錯誤:ELF類錯誤:ELFCLASS64

gcc -o public01.x public01.o computation.o coreset.o 
ld: fatal: file coreset.o: wrong ELF class: ELFCLASS64 
ld: fatal: File processing errors. No output written to public01.x 
collect2: ld returned 1 exit status 

回答

33

我認爲coreset.o是爲64位編譯的,而且你將它與一個32位的compute.o鏈接起來。

您可以嘗試重新編譯computation.c與gcc(1)

3

事實證明,我使用的編譯器版本與使用coreset.o完成的編譯版本不匹配。

一個是32位,另一個是64位。如果有其他人遇到類似的問題,我會保留這一點。

3

它看起來就像是一個64位的工具鏈編譯的目標文件中的「-m64」標誌,並且您使用的是32位的工具鏈。你有沒有嘗試在32位模式下重新編譯目標文件?

6

您可以指定'-m32'或'-m64'來選擇編譯模式。

在處理autoconf(configure)腳本時,我通常在環境中設置CC =「gcc -m64」(或CC =「gcc -m32」),以便正確編譯所有內容。至少,通常......人們發現無盡的方式讓這種方式不起作用,但我的擊球平均水平非常高(超過95%)。

+0

好奇:爲什麼使用`CC = gcc -m32`而不是`CFLAGS = -m32`? – 2012-09-14 21:13:57

+1

主要是因爲CFLAGS通常包含_N_其他我不想zap的重要標誌(包括目錄,定義標誌,優化和警告選項等)。 – 2012-09-14 21:17:16

2
sudo apt-get install ia32-libs 
+0

這個答案對於一個相關的問題是非常有用的:當運行一個可執行文件時,你可以得到幾乎相同的消息,這是解決這個問題的方法。所以一個來自我的慈善+1。 – 2013-10-03 13:52:18

0

包ia32-libs不可用,但被其他包引用。 這可能意味着包丟失,已過時,或 只能從其他來源 但是下面的軟件包替換: lib32z1 lib32ncurses5

E:包「IA32-庫」沒有安裝候選人