VS 2015 - Win XP (v140_xp) 編譯工具 ucrtbased.dll缺失

Visual Studio 2015 - Windows XP (v140_xp) 編譯工具 ucrtbased.dll缺失


先寫結論,最好不要使用VS2015-WinXP編譯工具來編譯VC++程序,因爲你最終會發現,編譯出來的程序如果是動態鏈接到運行庫的話,即便你已經拷貝了所有需要的運行庫dll,當在xp系統上運行時,還是會提示缺少ucrtbased.dll(Debug版)或者ucrtbase.dll(Release版)。

解決辦法有兩個:

1.靜態鏈接到運行時庫  (MT 或者 MTd)    如果使用了MFC,還要靜態鏈接到MFC

2.安裝VS2013  直接用VS2013-WinXP來編譯,編譯出的程序只要附帶上運行庫dll即可直接在XP上運行

下面記錄一下自己使用Visual Studio 2015 - Windows XP (v140_xp) 碰到的坑:

開始時,使用的VS2015 SP1,platform toolset選擇的Visual Studio 2015 - Windows XP (v140_xp) ,編譯出來debug版的程序,是動態連接到MFC和CRT的,我把所有需要的vc runtime dlls都拷貝到了xp虛擬機裏面,但是發現程序無法運行,彈出無法找到ucrtbased.dll,於是google開始找解決辦法,微軟的官方說法是 VS2015修改了CRT runtime,增加了ucrtbase.dll這麼個組件,這個組件必須得操作系統安裝一個補丁纔能有,直接把文件拷貝過去是不行的。但是XP沒有這個補丁,最低是WIN7。

然後從VS2015SP2開始,微軟修復了這個問題,XP也可以安裝ucrtbase.dll這個組件了,方法就是必須安裝VS2015的vcredist_x86.exe,這個文件的路徑在D:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\redist\1033下面,於是我開始更新我的VS2015,下載了SP3的更新包(下載鏈接),更新完畢花了將近4個小時。

然後我用VS2015SP3重新編譯了release版的程序,並且在我xp的虛擬機裏面安裝了SP3版本的vcredist_x86.exe,程序可以運行了。

但是還是有如下問題:

1.編譯出來的debug版的程序仍然無法在xp上運行,因爲缺少ucrtbased.dll,我也沒有找到debug版的vcredist_x86.exe

2.我的程序沒有安裝包,我不想用戶在使用的時候還必須得安裝一個vcredist_x86.exe,那跟使用C#程序之前必須安裝一個.net framework有什麼區別?

最後我決定使用VS2013-Windows XP 來編譯我的程序,因爲我電腦上之前裝有VS2013,後來裝的VS2015,所以工程-屬性裏面可以直接選擇VS2013的platform toolset。這樣的話就可以使用VS2015的IDE來寫代碼,使用VS2013的編譯器來編譯生成程序。

而且我可以確定的說,VS2013-Windows XP編譯出來的無論是debug版還是release版,32位或者64位,只需將對應的VC Runtime dll拷貝到程序目錄下,就可以直接在XP上運行,方便調試和使用。

至於說如何爲VS2015安裝VS2013的平臺工具集(platform toolset),老老實實再裝一個VS2013吧,裝完之後,VS2015裏面會自動識別出來的。簡單的辦法我用google也沒有找到,如果誰找到了,評論裏面留言下,多謝~。畢竟再裝一個VS2013是要花很多時間和精力的~~


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