为什么 Visual Studio 试图 Link 'freeglutd.lib'?

Why is Visual Studio Trying to Link 'freeglutd.lib'?

我正在尝试使用 Visual Studio 2013 编译 OpenGL 程序,但出现以下错误:

Error 1 error LNK1104: cannot open file 'freeglutd.lib' ...

作为参考,我安装了 FreeGLUT 并配置了 VS 以在正确的目录中搜索包含文件和库文件。实际上,VS 可以很好地识别 GLUT 包含文件。我还添加了 opengl32.libfreeglut.libAdditional Dependencies .

为什么 VS 正在寻找 'freeglutd.lib'?它绝对没有在附加依赖项中列出。我可以通过将 'libglut.lib' 重命名为 'libglutd.lib' 并将前者从依赖项中删除来解决编译错误,但我只是好奇为什么它会这样。

说到附加依赖项,添加 opengl32.lib 真的有必要吗?我可以在没有它的情况下编译我的(非常基本的)程序,但不止一个人说它是必需的,也许对于 Visual Studio?

的旧版本

可能已经回答:freeglut error LNK1104

还有两件事要检查:

  • 您是在调试模式还是发布模式下构建? freeglutd.lib 末尾的 d 表明它是一个用于调试构建的库
  • 尝试从头开始创建一个新项目,将一些使用 freeGLUT 的基本可运行代码放入其中,然后查看 VS 是否正确链接。这还将验证是否由于某种原因先前项目的项目文件已损坏(如@RobertHarvey 所建议的)或问题出在其他地方

如果你勾选 freeglut_std.h (freeglut V3.0):

            /* Link with Win32 shared freeglut lib */
#           if FREEGLUT_LIB_PRAGMAS
#               ifdef NDEBUG
#                   pragma comment (lib, "freeglut.lib")
#               else
#                   pragma comment (lib, "freeglutd.lib")
#               endif
#           endif

所以如果你不定义 NDEBUG,linker 将 link 到 "freeglutd.lib", 你可以通过在 "PreprocessorDefinitions" 中定义一个 NDEBUG 来解决这个问题。 祝你好运!

我通过在调试模式下从生成的 CMake 解决方案编译 freeglut 和 freeglut_static 解决了这个问题 - freeglutd 是在 lib/Debug 目录中创建的。你可以把这个目录放到lib路径下就可以了!

嘿伙计,我不知道你是否仍然遇到这个错误,但这里有一个解决方案。 "freeglutd.lib" 几乎与调试有关,因此最后是 "d",所以我所做的是进入:

Properties > C/C++ > Preprocessor > Preprocessor Definitions 并键入 NDEBUG。然后 OKA​​pply.

它的作用是在 "freeglut_std.h" 中有一个 NDEBUG 的 ifdef,如果定义了它,则使用 "freeglut.lib",否则它将使用 "freeglutd.lib"。因此,通过在预处理器定义中定义它,您现在正在使用 "freeglut.lib"。希望这对您有所帮助!