GLEW链接错误(undefined reference to `__glewBindVertexArray')

3
我最近决定使用未被弃用的技术,重新编写OpenGL游戏代码。我试图避免使用glBegin()和glEnd()等原始绘图方法,转而使用顶点数组对象等工具。我正在尝试将代码从网站http://www.opengl-tutorial.org/beginners-tutorials/tutorial-2-the-first-triangle/编译到我的项目中。我之前链接过很多次库,但不知为何这次却不行。我正在使用CodeBlocks作为IDE,MinGW GCC作为编译器,尝试将GLEW链接到我的项目中。该如何解决呢?是的,我已经链接了"glew32.lib"。

猜测一下:也许你需要在 #include <GL/glew.h> 行外面加上 extern "C" { ... } - Thomas
1
另外,你是如何尝试链接它的?根据http://glew.sourceforge.net/install.html中的说明,包括源文件肯定更容易。 - Thomas
extern "C" { #include <gl\glew.h> } - agusterodin
这是我在CodeBlocks项目构建选项中进行链接的方式。http://tinypic.com/r/fw7xx1/6 - agusterodin
对于在Ubuntu中寻找正确的链接标志的用户:-lGLEW - jackw11111
3个回答

7

如果您静态链接了GLEW,但未告知头文件发生这种情况,则通常会出现此问题。为此,您必须定义预处理器标记"GLEW_STATIC"。最好的方法是将其作为编译器选项完成。在GCC的情况下,请在您的编译器命令行中添加-DGLEW_STATIC


那个方法起作用了!谢谢。最终我决定只是把GLEW的源文件(glew.c)扔进去。然而,现在我得到了“undefined reference to `WinMain@16'”的错误。现在就让我死吧! - agusterodin
无论我是静态声明(就像你建议的那样)还是只是将源文件扔进去,我都会得到对WinMain的未定义引用。 - agusterodin
@user1575273:你在使用哪个框架?WinMain是常规Windows可执行文件的进程入口函数。你也可以使用普通的main,但这需要对链接选项进行一些调整。 - datenwolf
SDL。我将"#undef main"与所有其他预处理器声明一起添加,它解决了问题。 - agusterodin

1

试试这个:

pkg-config --libs --static glew

在终端中,然后复制它给你的库并粘贴到你的gcc/g++语句之后:

g++ <your-file-name>.cpp -o <output-file-name> -lGL -lGLU -lglfw3 -lrt -lm -ldl -lXrandr -lXinerama -lXcursor -lXext -lXrender -lXfixes -lX11 -lpthread -lxcb -lXau -lXdmcp -lGLEW -lGLU -lGL -lm -ldl -ldrm -lXdamage -lX11-xcb -lxcb-glx -lxcb-dri2 -lxcb-dri3 -lxcb-present -lxcb-sync -lxshmfence -lXxf86vm -lXfixes -lXext -lX11 -lpthread -lxcb -lXau -lXdmcp 

这应该能解决你的问题,因为通常这些库没有被声明。有些在上面重复是因为我也用了glfw。

0
如果您使用Linux,FLTK UI库与OpenGL,请查看.../bin/fltk-config文件的LDLIBS。它应该还包含“-lGLEW”,或者您可以在编译时将此选项添加到LDLIBS参数中。当然,“libglew-dev”也应该已经安装好了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接