在 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