編譯鏈接指令
1 nasm -f精靈foo.s -o foo.o
2 gcc -c酒吧
3 ld -s -o foobar bar.o foo.o
匯編語言用nasm編寫,用nasm編譯器編譯,C語言用gcc編譯。沒有問題,但是鏈接的時候有錯誤。提示如下:
輸入文件' foo.o '的ld: i386體系結構與i386:x86-64輸出不兼容
Google,意思是nasm編譯生成32位目標代碼,gcc在64位平臺默認生成64位目標代碼。兩者鏈接有錯誤,在64位平臺上默認64位模式下gcc鏈接。
所以在求解的時候,會有兩個解:
& lt1 & gt;讓gcc生成32位代碼,鏈接時以32位模式鏈接。
在這種情況下,您只需要修改編譯和鏈接指令,如下所示:
32位編譯鏈接指令
1 nasm -f精靈foo.s -o foo.o
2 gcc -m32 -c bar.c -o bar
3 LD-m elf _ i386-s-o foobar foo bar . o
-m32和-m elf_i386的詳細信息請參考gcc (man gcc)。
如果妳是更高版本的gcc(很可能是更新內核導致的),簡單使用-m32時可能會出現以下錯誤(妳沒有遇到過使用別人的體驗):
& gt在/usr/include/stdio.h:28:0中包含的文件中,
& gt來自test.c:1:
& gt/usr/include/features.h:323:26:致命錯誤:bits/predefs.h:沒有這樣的文件或目錄
& gt編譯終止。
這應該是構建32位可執行程序所缺少的包。按照以下說明安裝它:
sudo apt-get安裝libc6-dev-i386
這個時候應該沒有問題。