在 Visual Studio 2013 中链接 NuGet 库

Posted

技术标签:

【中文标题】在 Visual Studio 2013 中链接 NuGet 库【英文标题】:Linking against NuGet Libraries in Visual Studio 2013 【发布时间】:2014-03-01 10:17:52 【问题描述】:

嗨:在 Visual Studio 2012 Professional 更新 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 包的方式?

【问题讨论】:

试图通过查看终端中的编译器标志来调试它以发现任何差异,但 2012 和 2013 几乎相同——除了引用 vc110.pcb 与 vc120.pcb 用于调试符号.我似乎真的找不到 2013 年环境不应该工作的任何原因...... 查看 2012 年和 2013 年的理论链接器 CLI 选择与实际输出,我发现它们完全相同,除了 2012 年链接器神奇地插入了 .lib文件。我找不到任何设置差异来解释这一点:rifers.org/paste/show/2674 【参考方案1】:

安装包freeglut后我也有同样的问题

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

有效

【讨论】:

我遇到了同样的问题,安装 nupengl.core 解决了这个问题。但是你知道为什么吗?【参考方案2】:

为我解决链接错误的方法是 properties->linker->input->additional dependencies 并添加 opengl32.lib

您还需要确保 freeglut.dll/glew32.dll/glfw3.dll您的可执行文件位于 同一文件夹 >。 这就是 install-package nupengl.core 为你做的事情。

【讨论】:

【参考方案3】:

对于静态链接:

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

Project->Properties->Configuration Properties->Referenced Packages->freeglut->Linkage(选择静态)

对引用的包做同样的事情->glew

现在,在链接器->常规->附加库目录中:

$(SolutionDir)\packages\freeglut.2.8.1.15\build\native\lib\v110\Win32\Debug\static;$(SolutionDir)\packages\glew.1.9.0.1\build\native\lib\v110 \Win32\Debug\静态

库版本可能会改变,路径可能会有所改变,但截至 2015 年 5 月 14 日,这对我有用。

编辑:您仍然需要在 Linker->Input->Additional Dependencies 中包含“glew.lib”,因此,打扰引用的包设置似乎毫无意义(它适用于 freeglut,但不适用于 glew,如果你必须无论如何,都可以添加到附加依赖项,也可以添加 freeglut)。

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

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

【讨论】:

以上是关于在 Visual Studio 2013 中链接 NuGet 库的主要内容,如果未能解决你的问题,请参考以下文章

如何禁用Visual Studio 2013的浏览器链接功能

为啥最小 MFC 项目在 Visual Studio 2013 上存在链接错误?

使用 Visual Studio Express 2013 构建和链接 FreeImage

Microsoft Visual Studio 2013 链接错误 1104

visual studio 2013使用github获取代码

如何在visual studio 2013中设置角度2?