使用Visual Studio 2012并使用较旧的平台工具集进行编译?

byt*_*e77 30 c++ dll visual-studio visual-studio-2012 visual-c++-runtime

问题

我正在使用Visual Studio 2012来开发C++ DLL.在某些机器上,无法加载这些DLL,因为缺少设置为"v110"的平台工具集.

我试图安装较旧的c ++运行时.它们没有安装,因为"已经安装了一个较新的版本".我还安装了当前的Windows SDK,但仍然没有其他项目可供选择而不是v110.

如何使用旧版本的C++运行时编译我的C++ DLL,以便它可以在非开发人员的机器上运行?

平台工具集是v110

Rog*_*mbe 23

根据MSDN上的此页面,您需要具有相应版本的Visual Studio(2008或2010),或者"Platform Toolset"的相关Windows SDK下拉列表以列出这些版本:

要更改目标平台工具集,必须安装相关版本的Visual Studio或Windows Platform SDK.

您还似乎在"Platform Toolset"之间有点混淆,它控制着哪个编译器/链接器/等.用于构建应用程序,以及运行应用程序所需的"Visual C++ Redistributable" .您无法在用户的PC上安装"平台工具集",也无法通过在开发PC上安装特定的"Visual C++ Redistributable"来提供"平台工具集".

另外,据我所知,Visual C++ Redistributable不包含MFC运行时.它们可作为单独的MSI合并模块(MSM)使用.


byt*_*e77 7

我想分享一些我遇到的信息,并想出如何将它们用于我的目的.

显然,使用静态链接是一个不错的选择.它并不总是对我有用,但对于我的一个较小的项目,它的效果非常好.并且结果是除了之外没有依赖性的DLL kernel32.dll.

只需/MT用于发布配置和/MTd调试,你就可以了.

这里的问题是像我这样的开发人员在发布后不久就获得了当前的Visual Studio版本,但是你真的不能指望普通用户安装只有几周的运行时版本.并且安装不同版本的Visual Studio只是为了使用旧的运行时绝对不是你想要的.

Visual Studio 2013中的静态链接

  • 不幸的是,如果您使用托管代码(/ clr标志),则不能选择此选项.编译产生以下消息:`命令行错误D8016:'/ clr'和'/ MT'命令行选项不兼容.以下是对原因的讨论:http://www.windows-tech.info/17/5f0fd2024b850de5.php (3认同)