2012-04-09 165 views
0

我的系統是Centos 5.8 64位,我想編譯一個鏈接到32位庫的文件。編譯時加上-m32,但結果顯示「輸入文件」gc_basic_call_model_voice_video_3g_cnf_nbup.o「的i386:x86-64架構與i386輸出不兼容」。 看來,該文件不能在32位編譯。但是如果我不添加-m32,庫不能被編譯。如何成功編譯文件,謝謝!如何編譯與32位庫鏈接的64位文件

+0

哪臺機器? Linux呢? – weima 2012-04-09 05:16:27

+0

你使用過標誌'-fPIC'和'-rdynamic' – weima 2012-04-09 05:19:41

+0

我使用命令「gcc -m32 A.c B.c -Ldir -o output1.o output2.o」。但結果顯示i386:輸入文件「output1.o」的x86-64架構與i386輸出不兼容。 dir中的文件是32位庫。我不知道該怎麼做:( – Jasoniem9246 2012-04-09 05:43:38

回答

6

您不能在同一個程序中混合使用32位和64位代碼。編譯器告訴你,你的.o文件之一被編譯爲64位對象,所以它不能鏈接到32位可執行文件中。您需要重新編譯該目標文件,也可能使用其他源代碼,使用-m32來處理所有內容。

+1

或者你可能會引入64位庫(而不是64位對象)。無論如何:*不能*混合匹配32位和64位代碼。你必須重新編譯你所有的.c源文件,並設置你的-L庫路徑標誌,以確保你只讀取* 32位文件。 – paulsm4 2012-04-09 05:39:23

+0

@ paulsm4,這是一種可能性,但在這種情況下,錯誤消息明確說它是一個目標文件。 – Wyzard 2012-04-10 23:44:30

0

假設你編譯你的程序的32位版本(姑且稱之爲foo.c的)以下列方式:

gcc -m32 -c foo.c -o foo.o 

您應該然後調用使用-melf_i386標誌就可以了鏈接。

ld <whatever commands/flags you gave earlier> -melf_i386 

實施例:

ld -o foo.bin --oformat binary basic.o -melf_i386