Makefile書寫中的小問題

1:編譯的時候提醒:Missing separator…等的字眼
Gcc提示錯誤出現在編譯語句中的命令,於是查了下,網上說是tab鍵的問題,使用set tabstop=4 即可解決,但需要注意的是,最好還是先關掉之前在.vimrc的設置,因爲問題很可能出現在那裏。sudo vim /etc/vim/vimrc,到文件末尾,將之前添加的設置用雙引號”註釋掉,測試通過。
2:從i386向x86-x64移植時,make時會報錯,提示:/usr/bin/ld: i386 架構於輸入文件 main.o 與 i386:x86-64 輸出不兼容
這時需要以下命令:

nasm -f elf64 main.asm -o main.o

(以下摘自網上)
意思就是nasm 編譯產生的是32位的目標代碼,gcc 在64位平臺上默認產生的是64位的目標代碼,這兩者在鏈接的時候出錯,gcc在64位平臺上默認以64位的方式鏈接。
這樣在解決的時候就會有兩種解決方案:
<1> 讓gcc 產生32位的代碼,並在鏈接的時候以32位的方式進行鏈接
在這種情況下只需要修改編譯和鏈接指令即可,具體如下:
32位的編譯鏈接指令

1 nasm -f elf foo.s -o foo.o
2 gcc -m32 -c bar.c -o bar.o
3 ld -m elf_i386 -s -o foobar foo.o bar.o
具體的-m32 和 -m elf_i386 請自行查閱gcc (man gcc)

如果你是高版本的gcc(可能是由於更新內核造成的),可能簡單的使用-m32 的時候會提示以下錯誤(使用別人的歷程,自己未曾遇到):

In file included from /usr/include/stdio.h:28:0,
from test.c:1:
/usr/include/features.h:323:26: fatal error: bits/predefs.h: No such file or directory
compilation terminated.
這應該是缺少構建32 位可執行程序缺少的包,使用以下指令安裝:
sudo apt-get install libc6-dev-i386
此時應該就沒有什麼問題了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章