vc++生成程式不需要.net執行環境的可以執行exe程式的方法

SurgePing發表於2014-01-15
Q:vc++編譯出來後自動產生了debug檔案裡面的.exe檔案不能直接開啟執行?
A:在新建VC++工程的時候,其中有一項是選擇將MFC庫作為共享的DLL還是靜態的DLL。
因為MFC程式在執行時需要一些DLL檔案的支援,你從整合開發環境下編譯執行時,有預設的路徑來呼叫這些所需的DLL,因此執行不會有問題。而當你單獨執行資料夾下的可執行程式時,如果一開始選擇的是作為共享的DLL,則就會因為可執行程式的當前路徑下沒有所需的DLL檔案而無法執行。
解決方法:
一種是使用打包程式,生成程式的安裝包,就像商業軟體一樣;
另一種就是採用作為靜態的DLL方式,即將程式要用到的庫整合到生成的exe程式中。這樣程式會稍稍大一點點,相當於一個綠色軟體。你可以點選工程選單下設定選單項,常規選項卡,選擇作為靜態的DLL,重建工程就可以了;
 

在VS2005裡開發的VC++程式在編譯的時候,微軟預設會加入自己的 .Net Framework (方便推廣自家產品),讓你的VC++程式依賴它,這就導致程式編譯後無法跟往常一樣直接打包在別的機器就能正常執行。如果加入了.Net Framework ,安裝包就會非常大。

以下方法很好的解決了這個問題,通過以下兩種方法可以用VS2005將VC++程式編譯為不需要依賴.Net Framework環境就可以直接執行的程式了。

方法一:

1、右鍵專案-屬性

2、配置屬性-C/C++-程式碼生成

3、執行時庫-選擇/mt或者/mtd

 即 Multi-threaded (/MT)  或 Multi-threaded Debug (/MTd)      不要選 Multi-threaded DLL (/MD)  Multi-threaded Debug DLL (/MDd)

4、配置屬性-C/C++-常規

5、選擇在靜態庫中使用MFC

6、編譯執行即可

方法二:

在你的VS安裝目錄裡如下路徑     /Microsoft Visual Studio 8/VC/redist/Debug_NonRedist/x86/Microsoft.VC80.DebugCRT     下找到下列檔案:      msVCm80d.dll     msVCp80d.dll     msVCr80d.dll     Microsoft.VC80.DebugCRT.manifest    把這幾個檔案拷貝到目標機器上,與你編譯後的可執行程式放置在同一資料夾,或者放到system32下,就可以讓目標機器執行該程式了。     2.VC++帶模板函式時能編譯不能連線,顯示連線錯誤“error LNK2019: 無法解析的外部符號”     解決方法:用模板的時候,把宣告和實現放在一個檔案裡。因為模板的機制決定了不可能把模板的CPP象其它方式(不用模板)一樣編譯成一個obj,資料型別都是程式中用到時才會知道的,這時連線的函式名也會因型別不同而不同,所以多數編譯器都要求寫在一個檔案中。     3.如果在VC++2005的程式中使用UNICODE字符集的API等函式,可以在專案屬性->配置屬性->字符集處選“使用UNICODE字符集”,如果只用ASCII碼,就選“未設定”即可!

相關文章