程式設計師的自我修養中,有一段是通過內嵌彙編來完成乙個helloworld程式,這段彙編是32位的,在64位的機器上直接編譯就會出問題。
源**
/*
*tinyhelloworld.c
*/char* str = "hello world!\n";
void print()
void exit()
void nomain()
編譯過程gcc -c -fno-builtin -m32 tinyhelloworld.c
原因就是64位的系統不能編譯32位的目標檔案
解決方案:
用-m32強制用32位api編譯,就可以編譯通過
gcc -c -fno-builtin -m32 tinyhelloworld.c
使用ld鏈結指令碼
tinyhelloworld.lds
entry(nomain)
sections
/discard/ :
}
鏈結報錯
ld -static -e nomain -o tinyhelloworld tinyhelloworld.o
鏈結的時候加上"-m elf_i386"
ld -static -m elf_i386 -e nomain -o tinyhelloworld tinyhelloworld.o
64位系統編譯32位程式
如上使用c4這個小工具時遇到來需要 32位系統的需求,發現使用 m32引數後,編譯提示錯誤,如下 usr bin ld 未知的 模式 32 支援的 elf x86 64 elf32 x86 64 elf i386 i386linux elf l1om elf k1om i386pep i386pe ...
64位Linux系統編譯32位匯程式設計序
64位linux系統編譯32位匯程式設計序的時候需要 32位系統的需求,發現使用 m32引數後,編譯提示錯誤,如下 usr bin ld 未知的 模式 32 支援的 elf x86 64 elf32 x86 64 elf i386 i386linux elf l1om elf k1om i386pe...
win8 64位系統編譯boost
編譯64位boost 一直以來都是在win32環境下build和使用boost,但現在基本上每天都在64位win7下工作,所以很有必要把這幾天的經驗總結下來。和32位環境不同,x64環境下編譯得先從開始選單啟動visual studio的visual studio 2008 x64 win64 co...