起源:編程
今天在看之前沒看完的一本書《圖形程序開發人員指南》,在作裏面的例子。函數
第一章就出問題了,一個例子「L1_2.c, L1_3.asm" ,這是C程序和ASM彙編程序的混合編譯問題。工具
老是報各類錯誤,沒法實現。spa
緣由:blog
當時是2000年左右,應該是DOS環境,16bit的程序。開發
一開始,忽略了這麼多平臺限制,先用gcc編譯,後來用nasm編譯那段asm程序,要改個小語法,還報幾個錯。編譯器
解決:it
後來仍是用古老的 TC 2.0 做 C程序的編譯器,以及連接器。asm
那個 asm彙編文件 用 masm (版本5.11,6.1均可以) 或者 tasm 均可以。編譯
貼一下 Makefile 文件。 哦,這個是用了 make 工具。要麼是 gcc套件內的make.exe,要麼是 VC套件內的 nmake.exe。
期間,還出現過一個函數老是找不到定義,原來是大小寫的問題。 masm/tasm 默認是所有生成爲大寫。須要用 /Ml 或 /ml 打開。
成果:
test.exe : clean L1_2.obj L1_3.obj tcc -LC:\DevTools\Turboc2\Lib\ -etest.exe L1_3.OBJ L1_2.OBJ # masm /Ml # tasm /ml L1_3.OBJ : L1_3.asm tasm /ml L1_3.asm; L1_4.OBJ : L1_4.c tcc -IC:\DevTools\Turboc2\Include\ -c -oL1_4.OBJ L1_4.c L1_2.OBJ : L1_2.c tcc -IC:\DevTools\Turboc2\Include\ -c -oL1_2.OBJ L1_2.c clean: del *.obj del *.exe
總結:
1. 古老的技術和資料,有其價值所在,仍是能夠花心思學一下。
2. 注意1六、3二、64位環境問題。