$ 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