【发布时间】:2017-11-13 22:43:47
【问题描述】:
我正在尝试将 nanogui 添加到我已经使用 glfw 的 OpenGL 项目中。文档中有一个示例准确显示了如何执行此操作,但我无法在此示例项目之外复制它。
我的问题出现在链接步骤:
Error LNK2019 unresolved external symbol "public: __thiscall nanogui::Screen::Screen(void)" (??0Screen@nanogui@@QAE@XZ)
被指控的行是nanogui::Screen * screen = new nanogui::Screen();,这是唯一引用图书馆的行。
问题似乎很明显,编译器知道我将需要 nanogui 函数并期望链接器找出这些函数的代码在哪里,除非链接器失败。
这就是我所做的:
- 在我的 main.cpp 中包含 nanogui.h
- 在项目设置->C/C++->通用->附加包含目录中添加了路径。这解释了为什么编译部分可以工作
- 在项目设置->链接器->输入->附加依赖项中添加了 nanogui.lib 的路径。这应该可以解决我的问题,但它没有。
让我感到困惑的是,我能够从源代码编译库并运行示例项目。一定有某种我缺少的参数/标志,但我无法弄清楚。我在示例项目中使用了一些预处理器标志,但运气不佳。
编辑:sample project 我在使用作者提供并使用 CMake 生成的项目时设法运行,但无法在其外部复制。
【问题讨论】:
-
链接有两个部分。 1)设置可以找到库的路径,2)告诉编译器它需要寻找什么。您是否将 nanogui.lib 添加到附加依赖项中或使用 #pragma comment(lib, ...) 将其引入?
-
是的,我将它添加到附加依赖项中(编辑了一点我的问题,我已经写了但不是很清楚)但没有使用编译指示。我应该同时使用两者吗?
-
Added the path to nanogui.lib in project settings->Linker->input->additional Dependencies.你添加的只是文件名,nanogiu.lib就像 kernel32.lib、user32.lib 等。你应该已经将库路径添加到 VC++ 目录 -> 库目录条目,您在其中添加了包含目录。您可以使用 pragma 或其他依赖项,但不需要同时使用两者。 -
其实你可以把完整的路径放在
settings->Linker->input->additional Dependencies。例如,这就是我为 glfw 所做的,即使这可能是不好的做法,它仍然有效。我尝试了 nanogui 的方法,但没有取得多大成功。太奇怪了,示例项目有效。显然我在这里缺少一些东西。无论如何,谢谢你的帮助,它排除了我可能做错的事情!
标签: c++ opengl visual-studio-2017 glfw