【问题标题】:Linking nanogui into an OpenGL project with Visual Studio使用 Visual Studio 将 nanogui 链接到 OpenGL 项目
【发布时间】: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


【解决方案1】:

您需要为 x64 而不是默认的 x86 构建库。只需使用cmake -G "Visual Studio 15 2017 Win64" ..(的变体)运行 cmake,即明确指定 Win64。然后,您可以简单地在 Visual Studio 中构建 NanoGUI.sln 并链接到生成的 nanogui.lib。如果不使用 cmake 指定目标,则只会获得 Win32 选项作为构建目标,根据文档不支持。

【讨论】:

  • 哈哈也许就是这样。我今天没有办法尝试。我想我最终改用了 Nuklar :)。
  • 是的,我已经猜到这在 3 年后特别对你没有帮助,但我遇到了完全相同的问题并通过谷歌找到了这个问题,所以我想我会离开这个在这里回答以供将来的人查找。
猜你喜欢
  • 2017-04-20
  • 1970-01-01
  • 1970-01-01
  • 2021-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-08
  • 2010-10-06
相关资源
最近更新 更多