當前位置:編程學習大全網 - 源碼下載 - 如何在64位Linux系統上使用匯編和C語言混合編程第2頁

如何在64位Linux系統上使用匯編和C語言混合編程第2頁

編譯和鏈接說明:(AMD處理器,64位操作系統)

編譯鏈接指令

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

這個時候應該沒有問題。

  • 上一篇:JAVA應用怎麽破解?
  • 下一篇:請問大家怎麽看懂股票的各種技術指標?
  • copyright 2024編程學習大全網