64位的Ubuntu系統上使用匯編nasm和C語言

64位的Ubuntu系統上使用匯編nasm和C語言html

$ nasm -f elf foo.asm -o foo.o
$ gcc -c bar.c -o bar.o
$ ld -s  foo.o bar.o -o foobar
linux

  ld: i386 architecture of input file `foo.o' is incompatible with i386:x86-64 output

spa

意思是nasm 編譯產生的是32位的目標代碼,gcc 在64位平臺上默認產生的是64位的目標代碼,htm

這二者在連接的時候出錯,gcc在64位平臺上默認以64位的方式連接。blog

-------------------------------------------------------------------------------------------------------get

方法:input

讓gcc 產生32位的代碼,並在連接的時候以32位的方式進行連接it

在這種狀況下只須要修改編譯和連接指令便可,具體以下:asm

32位的編譯連接指令編譯

$ nasm -f elf foo.asm  -o  foo.o

$ gcc -m32 -c bar.c -o bar.o

$ ld -m elf_i386 -s foo.o bar.o -o foobar

$ ./foobar
  the 2nd one

 

參考地址:http://www.linuxidc.com/Linux/2012-12/75804.htm

相關文章
相關標籤/搜索