GCC SDL + GLEW链接错误

时间:2011-11-14 02:13:54

标签: opengl gcc sdl glew

我有一个静态库,我通过GLEW调用OpenGL扩展函数。由于项目是在GCC(NetBeans 7.0)中构建的,并且GLEW的二进制文件仅以Visual-C风格提供,因此我使用GCC构建了GLEW(1.7.0)作为静态库。 (我也有兴趣为什么这是必要的,因为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中使用GLE和SDL?

1 个答案:

答案 0 :(得分:1)

您的库是以这样的方式构建的,以便链接到GLEW的DLL版本 - _imp____glewGetStringi_imp__glewInit是导入库符号,即定义的组合导致出现以下行时编译;

extern __declspec(dllimport) PFNGLGETSTRINGIPROC __glewGetStringi;

如果在编译库时没有定义GLEW_STATIC,可能会发生这种情况(但是你会这样做;仔细检查每个对象)

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