2013-03-16 58 views
30

问题使用Visual Studio 2012并使用旧版平台工具集进行编译?

我正在使用Visual Studio 2012开发C++ DLL。在某些机器上,这些DLL无法加载,因为设置为“v110”的平台工具集丢失。

我试图安装较旧的C++运行时。他们没有安装,因为“已经安装了更新的版本”。我还安装了当前的Windows SDK,但仍然没有其他项目可以从v110中进行选择。

问题

我如何编译我的C++与旧版本的C++运行时的DLL所以它会在非开发机器上运行?

Platform toolset is v110

+0

您是否曾尝试在这些非开发人员计算机上安装[Visual C++ Redistributable for VS 2012](http://www.microsoft.com/en-us/download/details.aspx?id=30679),然后查看是否有用? – 2013-03-16 19:26:44

+10

是的,这是有效的。但不是强迫用户安装运行时,我更愿意使用这些运行时的旧版本,这样我的应用程序就可以在目标机器上运行。如何在属性窗口中选择较旧版本的“平台工具集”? – bytecode77 2013-03-16 19:36:24

+1

你需要安装旧的visual studio – 2013-03-16 20:11:44

回答

23

this page on MSDN,你需要的Visual Studio(2008或2010)的相应版本,或有关Windows SDK的“平台工具集”下拉菜单,列出那些版本:

要改变目标平台工具集,则必须安装Visual Studio或Windows Platform SDK的关联版本。

“平台工具集”,它控制哪些编译器/链接器/等,似乎有点混淆。用于构建您的应用程序和“Visual C++ Redistributable”,这是您需要的运行您的应用程序。您无法在用户的PC上安装“平台工具集”,也无法在开发PC上安装特定的“Visual C++可再发行程序”。

此外,据我所知,Visual C++ Redistributable不包括MFC运行时。它们可作为单独的MSI合并模块(MSM)提供。

+0

我已安装Windows SDK,但仍无法选择不同的运行时。 – bytecode77 2013-03-16 20:32:07

+1

然后,您可能还需要安装Visual Studio 2008或2010,不幸的是... – 2013-03-16 21:11:12

1

以及这取决于你正在试图建立。有些东西可能通过安装Windows SDK 7.1来支持。 see this post, same question, 但是如果你的项目依赖于MFC,那么不幸的是它看起来好像根本不可能,主要是因为除了VS2010,其他的都是部署MFC库。

+0

正如我所说的,我确实尝试安装Windows SDK,但我仍然无法选择较旧的运行时版本。另外,我没有使用MFC。该DLL只包含一个函数并使用一对标准的包含文件。 – bytecode77 2013-03-16 20:06:20

+0

请阅读本主题,他们能够在VS2012中使用SDK7.1工具集,但在编译代码时遇到错误 – 4pie0 2013-03-16 20:08:07

7

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

显然这是一个很好的选择,使用静态链接。它并不总是为我工作,但对于我的一个小型项目来说,它工作的很好。并且结果是除kernel32.dll等之外没有依赖关系的DLL。

只需使用/MT进行发布配置,使用/MTd进行调试即可,无需担心。

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

Static linking in Visual Studio 2013

+3

不幸的是,如果您使用托管代码(/ clr标志),这不是一个选项。编译产生这样的信息:'命令行错误D8016:'/ clr'和'/ MT'命令行选项不兼容。这里有一个讨论原因:http://www.windows-tech.info/17/5f0fd2024b850de5.php – Rast 2015-02-16 11:55:44

1

一种互联网档案馆提示。 (我无法评论上面的语句,我不知道为什么)

要使用V90平台工具集(= Visual Studio 2008中)在一个新的Visual Studio(我testet 2013年和2015年),你需要安装Visual Studio 2008和另外Visual Studio 2010中,因为在MS的vs90平台工具集的定义生成程序的文件夹是一部分冯Visual Studio 2010中

C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Platforms\x64\PlatformToolsets为V90和V100

C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0 

为V110 V120 V140和

代表Visual Studio版本:v90 = 2008,v100 = 2010,V110 = 2012,V120 = 2013,V140 = 2015。

安装vob VS2010之后,较新的Visual Studio 2013和2015版本可以使用vs90和vs100平台工具集。 (这个工作不需要Visual Studio 2013/2015的全新安装。)我想Visual Studio 2012就像VS2013和VS2015一样。

相关问题