我有一个静态库,我在其中通过 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?