我跟随OpenGL tutorial和我在最后一步,使用GLEW设置FPS计数器。我遇到了一个问题,我必须使用#pragma comment(lib, "glew32sd.lib")
来成功链接我的库。而使用freeglut,我没有必要明确地引用它。
我的结构很简单,
library\
dll\
freeglut.dll
glew32d.dll
include\
GL\
freeglut.h
freeglut_ext.h
freeglut_std.h
glew.h
glut.h
glxew.h
wglew.h
lib\
freeglut.lib
glew32d.lib
glew32sd.lib
我已将Visual Studio设置为包含include \ dir并在lib中查找其他库。 dll文件夹设置为通过构建后作业复制到输出。我很确定它有效,因为到目前为止,freeglut的一切都很好。只有glew没有工作。
Visual Studio 如何无法链接glew但是它正在使用freeglut?它们位于同一目录中。我看到freeglut正在链接,因为我在链接器的输出1> Processed /DEFAULTLIB:freeglut.lib
中看到了它。两个库都是从我的计算机编译的。
我尝试将GLEW编译为静态库,所以我假设编译器没有加载.dll所以我不妨删除它。但在这两种情况下它都不会起作用。我尝试使用#define GLEW_STATIC
和#define GLEW_BUILD
,也不会链接。
然后我偶然发现了SO的答案,发现如果我#pragma comment(lib, "glew32sd.lib")
它会正确加载我的库。现在我假设通过明确地告诉链接器使用这个.lib它使它工作。但是为什么freeglut会自动加载?我没有在任何地方直接引用它。
现在我的代码正在运行,但我只是好奇。我是一名新的C ++开发人员,静态库和动态库的概念在我看来仍然太新鲜。
答案 0 :(得分:1)
您需要通过编译指示或项目属性的Project-> Linker-> Input-> Additional Dependencies区域告诉链接器您使用哪些库。
对于freeglut,在freeglut_std.h
中为您提供了pragma,除非您明确将FREEGLUT_LIB_PRAGMAS
定义为0
。如果您这样做,则需要通过自己的pragma或Additional Dependencies区域手动添加依赖项。
通常,您需要添加所需的依赖项。根据我的经验,图书馆很少尝试自动完成。