我們用Visual C++ XXXX (XXXX代表2005,2008,2010等)編譯器編寫的應用程式,要使其能在沒有安裝Visual C++ XXXX編譯器的目標電腦上運行,必須在目標電腦上安裝對應的Microsoft Visual C++ XXXX運行庫。安裝後,將提供對C、標準C++、ATL、MFC、OpenMP以及MSDIA等類庫的運行時支援。例如:要運行Visual C++ 2008編寫的應用程式,需在目標電腦上安裝Microsoft Visual C++ 2008 SP1 Redistributable Package。
當我們在微軟的官方網站上搜尋下載Microsoft Visual C++ XXXX Redistributable時會發現有許多不同的版本,下面我們以Microsoft Visual C++ 2008 Redistributable為例來講解下常見版本。
Microsoft Visual C++ 2008 Redistributable的常見版本如下:
Microsoft Visual C++ 2008 SP1 Redistributable Package (x86)
Microsoft Visual C++ 2008 SP1 Redistributable Package (x64)
Microsoft Visual C++ 2008 Redistributable Package (x86)
Microsoft Visual C++ 2008 Redistributable Package (x64)
其中,x86表明適用於32位系統,x64表明適用於64位系統。
SP1相當於版本號碼,表明是最新的,所以,我們應當安裝最新版本:SP1版本。
注意:64位作業系統上既能運行32位應用程式,也能運行64位應用程式,所以在64位作業系統上,應根據應用程式是32位的還是64位的,來選擇是安裝x86版本還是x64版本的Visual C++運行庫。
在沒有安裝Microsoft Visual C++ XXXX運行庫的電腦上運行Microsoft Visual C++ XXXX發布的應用程式,一般會報這樣的錯誤:無法啟動這個應用程式,因為應用程式的設定不正確,重新安裝應用程式應該可以修複這個問題。所以,一般在啟動程式時根據是否報此錯誤來判斷有沒有安裝對應的Visual C++運行庫。
其實,我們也可以在沒有安裝Visual C++ XXXX運行庫的目標電腦上運行Visual C++ XXXX發布的應用程式。採取的方案只能是在編譯連結應用程式時採用靜態連結,設定Use MFC in a Static Library屬性即可,如所示:
預設情況下使用VC建立的工程都是採用動態連結,即Use MFC in a Shared DLL。
當設定Use MFC in a Static Library時,將採用靜態連結的方式編譯連結應用程式。雖然可以使運行該程式的目標電腦不用安裝對應的Visual C++運行庫,但是,由於靜態連結會將用到的對應庫檔案載入到產生的應用程式中,會明顯增大產生的可執行檔的大小,在執行時也需要更多的系統資源,在裝入記憶體時也會消耗更多的時間。(例如我用Visual Studio 9.0編寫的一簡單的MFC對話方塊程式,採用動態連結時程式大小為600KB,採用靜態連結時程式大小為2.16MB)。
具體應根據實際情況來選擇靜態連結還是動態連結,但一般情況下會選擇動態連結並在程式啟動並執行目標電腦上安裝對應的Visual C++運行庫。