1

我有一个静态库,我在其中通过 GLEW 调用 OpenGL 扩展函数。由于该项目是在 GCC (NetBeans 7.0) 中构建的,并且 GLEW 的二进制文件仅以 Visual-C 风格提供,因此我将 GLEW (1.7.0) 构建为带有 GCC 的静态库。(我也很感兴趣,为什么这是必要的,因为 GLEW 似乎是纯 C 语言,其中 ABI 和交叉编译器兼容性不是 AFAIK 的问题。)

在我的静态库中,我将 GLEW_STATIC 和 NO_SDL_GLEXT 定义为项目预处理器指令 (-D),然后我

#include "GL/glew.h"
#include "SDL/SDL.h"

然后在(测试)应用程序中链接静态库,该应用程序还按以下顺序链接到以下库:

my_static_library
mingw32
glew32
opengl32
SDLmain
SDL

此设置在我的静态库中给了我两个未定义的参考错误:

undefined reference to `_imp____glewGetStringi'
undefined reference to `_imp__glewInit'

实际上,这是在静态库中对 GLEW 功能进行的两次调用。然而,链接器曾经抱怨过其他调用(在 -DGLEW_STATIC 之前),但现在似乎还可以。

我无法通过将链接顺序交换到 opengl32 和 glew32 来改善这种情况(一些更多未定义的引用来wgl...调用)。此外,GLEW_STATIC(和 NO_SDL_GLEXT)曾经在测试应用程序中定义,但已被删除并且似乎无关紧要。

为什么会出现剩余的错误,我该怎么做才能摆脱它们,即如何在 GCC 中使用 GLEW 和 SDL?

4

1 回答 1

1

你的库是这样构建的,链接到 GLEW 的 DLL 版本 -_imp____glewGetStringi并且_imp__glewInit是导入库符号,即定义的组合导致编译时出现以下行;

extern __declspec(dllimport) PFNGLGETSTRINGIPROC __glewGetStringi;

如果您在编译库时未定义,则可能会发生这种情况GLEW_STATIC(但您做了;仔细检查每个对象)

或者

您的 GLEW 版本在标题中有错误。在 GLEW 1.7.0 中,它按预期工作。

于 2011-11-14T10:11:11.807 回答