《LINUX入門:Ubuntu 16.04使用NASM編譯時用ld鏈接程序出現:i386 架構于輸入文件 sandbox.o 與 i386:x86》要點:
本文介紹了LINUX入門:Ubuntu 16.04使用NASM編譯時用ld鏈接程序出現:i386 架構于輸入文件 sandbox.o 與 i386:x86,希望對您有用。如果有疑問,可以聯系我們。
Ubuntu 16.04使用NASM編譯時用ld鏈接程序呈現:i386 架構于輸入文件 sandbox.o 與 i386:x86-64 輸出不兼容(I386 architecture in the input file sandbox.o is not compatible with i386: x86-64 output)
差錯:
問題辦理過程:
1、先肯定CPU的架構
2、這是以64位架構的CPU,如果使用elf參數時,默認是以32位模式去處理,那么此時需要更精確的去指定這個模式,好比elf32(32位),elf64(64位),具體的參考:http://www.nasm.us/doc/nasmdoc7.html
那么改寫上面的寫法可認為:
nasm -f elf64 -g -F stabs sandbox.asm -o sandbox.o
ld -o sandbox sandbox.o
3、假如想編譯程32位和64位的組合,那么可以從鏈接入手,寫法可以改為:
nasm -f elf -g -F stabs sandbox.asm -o sandbox.o
ld -m elf_i386 -o sandbox sandbox.o
其實這里說法應該是紕謬的,不能說是組合,而是應該說是鏈接生成兼容32位模式的應用程序才對.
因為從上面可以看書,elf默認是32為,而elf_i386也為32位,此中elf_x86_64才是64位.所以,應該兼容才對.
也許上面說法也是不專業,或者這樣說:nasm編譯出來是32位的,而鏈接程序ld將32位的應用程序鏈接到了64位上做為可執行文件,這樣做是紕謬的,應該將32位應用程序鏈接到32位上做為可執行文件.
所以,我覺得應該不是與CPU架構有關,而是應該與操作系統有關,操作系統區分32位和64位,而很多的匯編例子還是停留在32位x86上,造成以上的問題呈現.
還有一點,使用ld時,有些書本上會這樣寫“ld -m elf_i386 -o sandbox.o sandbox”,如今新版本已經不支持了.
本文永遠更新鏈接地址:
維易PHP培訓學院每天發布《LINUX入門:Ubuntu 16.04使用NASM編譯時用ld鏈接程序出現:i386 架構于輸入文件 sandbox.o 與 i386:x86》等實戰技能,PHP、MYSQL、LINUX、APP、JS,CSS全面培養人才。
轉載請注明本頁網址:
http://www.snjht.com/jiaocheng/9293.html