为什么Visual Studio尝试链接' freeglutd.lib'?

时间:2015-03-17 22:33:46

标签: visual-studio freeglut

我尝试使用Visual Studio 2013编译OpenGL程序,但是我收到以下错误:

  

错误1错误LNK1104:无法打开文件   ' freeglutd.lib' ...

作为参考,我安装了FreeGLUT并配置了VS来搜索包含文件和库文件的正确目录。实际上,VS认识到GLUT包含文件就好了。我还将 opengl32.lib freeglut.lib 添加到附加依赖项

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

说到额外的依赖关系,是否真的需要添加opengl32.lib?我可以在没有它的情况下编译我的(非常基本的)程序,但是不止一个人说它可能需要,可能是旧版本的Visual Studio?

4 个答案:

答案 0 :(得分:5)

如果你检查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,链接器将链接到“freeglutd.lib”, 你可以通过在“PreprocessorDefinitions”中定义一个NDEBUG来解决这个问题。 祝你好运!

答案 1 :(得分:1)

可能已经回答:freeglut error LNK1104

还有两件事需要检查:

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

答案 2 :(得分:0)

我通过在调试模式下从生成的CMake soluton编译freeglut和freeglut_static解决了这个问题 - 在lib / Debug目录中创建了freeglutd。您可以将此目录放入lib路径,然后它就可以了!

答案 3 :(得分:0)

嘿,我不知道你是否还有这个错误,但这是一个解决方案。几乎“freeglutd.lib”与调试有关,因此最后是“d”,所以我做的是进入:

属性> C / C ++>预处理器>预处理器定义并键入NDEBUG。然后确定应用

这样做在“freeglut_std.h”中有一个NDEBUG的ifdef,如果它被定义,则使用“freeglut.lib”,否则它将使用“freeglutd.lib”。因此,通过在预处理器定义中定义它,您现在使用“freeglut.lib”。希望这可以帮助你!