2016-07-26 65 views
1

我已經構建了一個使用C++ 11功能和winsocket的應用程序。 我使用windows 10和Visual C++ 2015編譯器構建了應用程序。 在Win10機器上運行良好。在Win7機器上出現一個彈出窗口,指出文件ucrtbase.dll丟失。使用Visual Studio 2015爲Windows 7和Windows 10構建應用程序

我在網上做了一些小小的研究,發現微軟對CRT做了很大改變,因此改名爲一些dll。這些DLL本身在Win7上不可用。

有沒有辦法建立我的應用程序獨立於這個庫?我想將應用程序發佈到Win7和Win10用戶。

謝謝

+0

使用靜態庫選項(/ MT而不是/ MD,它是項目設置之一)將修復一些問題,但可能不是所有這些問題。我不記得CRT庫是否可以靜態鏈接。我似乎記得像kernel32.dll這樣的東西沒有靜態鏈接(即使使用/ MT選項)。 – rcgldr

回答

3

隨着對你的問題的評論說,可以通過靜態項目的Configuration Properties -> C/C++ -> Code Generation -> Runtime Library設置使用/ MT標誌鏈接CRT。

如果這不是您的項目的選項,您可以改爲安裝CRT可重新分配。

C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\redist\1033,你會發現三個文件:

  • vcredist_arm.exe
  • vcredist_x64.exe
  • vcredist_x86.exe

這些是包含此版本的Visual Studio,設計了CRT要安裝的軟件包在需要運行你的軟件的機器上。

在運行應用程序之前,在目標系統上安裝適當的可再發行組件。例如,如果您的應用程序是32位,請安裝vcredist_x86.exe。對於64位,請安裝vcredist_x64.exe

通常,當您爲軟件創建安裝程序時,也會捆綁這些文件,並在安裝過程中運行它們。

+0

謝謝,/ MT旗幟做到了。對於cmake的是通過如(MSVC) 集(CMAKE_CXX_FLAGS_DEBUG 「$ {} CMAKE_CXX_FLAGS_DEBUG/MTD」) 集(CMAKE_CXX_FLAGS_RELEASE 「$ {} CMAKE_CXX_FLAGS_RELEASE/MT」) ENDIF() – Soccertrash

+1

不要忘記更新CMAKE_C_FLAGS_完成*如果你的解決方案涉及C項目,我最近遇到過這種情況;) – badgerr

相關問題