我在C ++项目中修补NuGet包管理器并遇到了问题。在我的VS 2017 RC(具有Platform Toolset v.141)项目中,我添加了两个包 - 特别是GLEW和GLFW。我成功地包含了相应的标题,但无法链接我的项目 - 显然这些软件包不是为VS 2017构建的。
在packages/<package>/build/native/lib
中,有几个v###
子文件夹:GLEW为v100, v110
,GLFW为v100, v110, v120, v140
。据我所知,这些包含针对相应VS工具集编译的二进制文件。如果我将项目的平台工具集从v141
更改为v140
(我也安装了VS 2015),GLFW链接错误消失(因为VS从GLFW包中找到了相应的二进制文件),但是GLEW仍然没有链接 - 我既没有v110
工具集,也没想在那里降级。
有没有办法将旧的NuGet C ++包链接到具有现代平台工具集的项目?如果有可能的话,我可以从源代码构建软件包 - 只要它保持一个自动管理到某个点的nuget软件包。
答案 0 :(得分:1)
我们无法将旧的NuGet C ++包链接到具有现代平台工具集的项目。
Visual Studio支持多个平台工具集,但现代平台工具集不向后兼容。因此,在VS 2015中使用平台工具集v140时,GLEW的v100,v110将生成链接错误。
在Visual Studio 2015中使用v100,v110 for GLEW的最佳方法是安装v110工具集并使用它来维护二进制兼容的遗留代码。
有关为旧平台配置程序的详细信息,请参阅: https://msdn.microsoft.com/en-us/library/jj851139.aspx
答案 1 :(得分:0)
似乎没有包含v141 PlatformToolset的软件包。您可以通过编辑packages \ googletest.1.8.0.0 \ build \ native \ googletest.targets中包含的配置强制将v140目标二进制文件与v141项目链接:
<ItemDefinitionGroup Label="Win32 and v140 and Release" Condition="'$(Platform.ToLower())' == 'win32' And '$(PlatformToolset.ToLower())' == 'v140' And ( $(Configuration.ToLower().IndexOf('debug')) == -1 )">
到
<ItemDefinitionGroup Label="Win32 and v140 and Release" Condition="'$(Platform.ToLower())' == 'win32' And '$(PlatformToolset.ToLower())' == 'v141' And ( $(Configuration.ToLower().IndexOf('debug')) == -1 )">
但是你的意思可能会有所不同。