使用Visual Studio 2015为Windows 7和Windows 10构建应用程序

问题描述:

我已经构建了一个使用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

随着对你的问题的评论说,可以通过静态项目的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