使用VC2005編譯靜態應用程序的方法


轉自:http://hi.baidu.com/hardyheron/blog/item/0a80714575dd883687947387.html


使用VC2005編譯靜態應用程序的方法
2009-07-16 18:03

使用VC編譯C或者C++程序,都需要相關的C runtime庫才能運行。如果你是VC6,相應的庫就叫MSVCR,如果是VC2005,那就是MSVCR08,VC2008就是MSVCR09。我這 裏假設你安裝的是VC2005,請進入如下目錄:{VS Install Dir}/VC/redist/x86和{System Driver}:/windows/system32,你就會發現下面有很多很多的庫。沒錯,這裏相當一部分就是C Runtime庫。

用VC2005編寫的Console Win32 C/C++程序,怎麼發佈給最終用戶呢?有兩個方法:

(1) 靜態引用C Runtime庫

打開"項目"->"屬性"->"配置屬性"->"C/C++"->"代碼生成"->"運行時庫 "。這裏一共有四個選項,其中MT開頭的是靜態引用,MD開頭的是動態引用,d結尾的是Debug調試版本,沒有d的是Release發佈版本,所以就一 共有四個選項。

我們選擇/MT(這是默認選項),相應的在"項目"->"屬性"->"配置屬性"->“常規”裏選上“在靜態庫中使用 MFC”。然後編譯程序(生成的程序應該不小),把這個程序發給用戶,然後用戶就可以直接運行了。

如果你是英文版的Visual Studio 2005,則設置這個屬性的路徑爲:"Project" --> "Properties" --> "Configuration Properties" --> "C/C++" --> "Code Generation" --> "Runtime Library"。

(2) 動態引用C Runtime庫

跟上面差不多,不過是用/MD選項編譯,然後發給用戶。這時,用戶是不能運行這個程序的,會報個"程序安裝出錯,不能運行"、"重裝系統可能會修復問題"之類的提示。

這時我們還要把C Runtime庫一併發過去。把{VS Install Dir}/VC/redist/x86/Microsoft.VC80.CRT下的所有文件(注意,是所有,包括那個.manifest文件)發給用戶, 用戶把這些文件放在我們程序的同一個目錄,然後再次運行,這時,程序就起來了。

第一種是靜態編譯的方式,第二種是動態編譯的方式。靜態編譯出來的可執行文件會比動態編譯出來的大許多,但是用戶使用上會方便很多,可以視情況選用。

如果你有多個工程,請記住把每個工程的配置都設成一致。

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