將一個很簡單的程序編譯得到一個*.exe文件。
在本地自然可以順便運行,有時候你剛剛做完一個這樣的練習,迫不及待地要向朋友炫耀一下。一臉淫笑的你守在QQ旁正期待着贊揚的詞匯,一邊又腦補一下朋友的崇拜,可時間似乎凝固了,仿佛過了一個世紀后——“你發的這東西我怎么打不開啊?”
為什么會這樣呢?
原因是VS默認為動態編譯。
在之前的教程里我們學了靜態編譯與動態編譯的區別,我再把他搬過來:
靜態編譯在程序編譯時dll會被連接到目標代碼中,程序運行時將不再需要該靜態庫。
動態編譯在程序編譯時dll並不會被連接到目標代碼中,而是在程序運行是才被載入,因此在程序運行時還需要動態庫存在。
我們只需設置為靜態編譯即可,讓dll寫進exe內,沒有外部庫也可以運行。
然后重新編譯即可。
對於VS來說:
靜態編譯/MT,/MTD 是指使用libc和msvc相關的靜態庫(lib)。
動態編譯,/MD,/MDd是指用相應的DLL版本編譯。
值得注意的是,使用靜態編譯會讓程序變大。