链接Visual Studio 2013中的NuGet库

时间:2014-02-05 05:46:25

标签: c++ visual-studio-2012 visual-studio-2013 nuget freeglut

嗨:在Visual Studio 2012 Professional,Update 4中,我可以通过创建一个新的Visual C ++项目(使用空白模板)并进入NuGet包管理器控制台并输入以下内容来轻松创建一个新的OpenGL项目:

Install-Package freeglut
Install-Package glew
Install-Package glm

获取freeglut,glew和glm(仅限标题的数学库)的库。

然后我可以创建一个利用这些库的简单示例:(full example

#include <GL/freeglut.h>
#include <GL/glew.h>
#include <glm/glm.hpp>

int main(int argc, char *argv[]) {
  ...
}

然后在没有任何进一步配置的情况下,我可以点击大绿色构建按钮,所有内容都编译,链接和运行(在NuGet包中找到可再发行的.dll)并且工作正常。

在Visual Studio 2013中,相同的方法不起作用:VS2013抱怨它无法找到freeglut.lib:

  

LINK:致命错误LNK1104:无法打开文件'freeglut.lib'

如果我手动编辑库路径并将DLL复制到构建输出目录,我可以让项目编译,但这似乎非常不方便。

有趣的是,即使没有设置或更改任何内容,Visual Studio似乎足够聪明,知道寻找 freeglut.lib,但它似乎不知道在哪里找到它。

这是一个每个包的难度,还是VS2013改变了Visual Studio如何处理NuGet包的内容?

3 个答案:

答案 0 :(得分:10)

我在Install-Package freeglut

之后遇到同样的问题

然后我尝试安装另一个包:Install-Package nupengl.core

它有效

答案 1 :(得分:3)

为我解决了链接错误的原因是 properties-&gt; linker-&gt; input-&gt;其他依赖并添加了 opengl32.lib

您还需要确保 freeglut.dll / glew32.dll / glfw3.dll 您的可执行文件相同的文件夹中>。 这就是install-package nupengl.core为您所做的。

答案 2 :(得分:0)

对于静态链接:

#define GLEW_STATIC
#define FREEGLUT_STATIC
#include <GL/glew.h>
#include <GL/freeglut.h>

项目 - &gt;属性 - &gt;配置属性 - &gt;参考包 - &gt; freeglut-&gt;链接(选择静态)

对Referenced Packages-&gt; glew

执行相同操作

现在,在Linker-&gt; General-&gt;其他库目录:

$(SolutionDir)\包\ freeglut.2.8.1.15 \建立\天然\ lib中\ V110 \的Win32 \调试\静态; $(SolutionDir)\包\ glew.1.9.0.1 \建立\天然\ lib中\ V110 \的Win32 \调试\静态

图书馆版本可能会发生变化,路径可能会有所变化,但这对我来说在2015年5月14日有用。

编辑:你仍然需要在链接器中包含“glew.lib” - >输入 - >附加依赖关系,因此,使用参考包设置烦恼似乎毫无意义(它适用于freeglut,但不适用于glew,如果你不管怎样,不得不加入其他依赖关系,也可以添加freeglut。

对于动态链接,在Referenced Packages部分中,为freeglut&amp;选择“动态链接”。 glew,并在Additional Library Directories设置中添加或替换每个包的库目录,并将DLL从可再发行目录复制到Projects输出目录,将调试DLL与Debug目录相匹配等。 另外,省略XXX_STATIC #defines:)

动态设置是猜测,但我知道静态设置有效。