为什么 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.lib 和 freeglut.lib 到 Additional 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。然后 OK 和 Apply.
它的作用是在 "freeglut_std.h" 中有一个 NDEBUG 的 ifdef,如果定义了它,则使用 "freeglut.lib",否则它将使用 "freeglutd.lib"。因此,通过在预处理器定义中定义它,您现在正在使用 "freeglut.lib"。希望这对您有所帮助!
我正在尝试使用 Visual Studio 2013 编译 OpenGL 程序,但出现以下错误:
Error 1 error LNK1104: cannot open file 'freeglutd.lib' ...
作为参考,我安装了 FreeGLUT 并配置了 VS 以在正确的目录中搜索包含文件和库文件。实际上,VS 可以很好地识别 GLUT 包含文件。我还添加了 opengl32.lib 和 freeglut.lib 到 Additional 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。然后 OK 和 Apply.
它的作用是在 "freeglut_std.h" 中有一个 NDEBUG 的 ifdef,如果定义了它,则使用 "freeglut.lib",否则它将使用 "freeglutd.lib"。因此,通过在预处理器定义中定义它,您现在正在使用 "freeglut.lib"。希望这对您有所帮助!