C++链接器无法处理glCreateShader,报glewCreateShader相关未定义引用如何解决
问题解决方法
错误原因
你遇到的__glew*未定义引用错误是GLEW库的正常机制导致的:你引入的<GL/glew.h>头文件会通过宏替换,把所有标准OpenGL函数(包括你调用的glCreateShader、glShaderSource、glCompileShader)替换为__glew前缀的内部函数指针,这是GLEW实现OpenGL扩展动态加载的逻辑,和你是否手动编写glewCreateShader调用无关。
具体解决步骤
- 补全GLEW库的链接参数
你当前的编译命令只链接了libGL和libX11,没有链接GLEW本身的库,在编译命令末尾添加-lGLEW即可,修改后的完整编译命令参考:
- 补全GLEW库的链接参数
g++ -g -Wall -o _build/main src/main.cpp -I/opt/x11/include -L/usr/x11/lib -I./include -I./inc -I./inc/glm -lGL -lX11 -lGLEW
- 确认代码中已执行GLEW初始化
你需要在创建完OpenGL上下文之后、调用任何OpenGL函数之前,执行GLEW的初始化操作,否则运行时会出现函数指针为空的崩溃问题,示例代码如下:
- 确认代码中已执行GLEW初始化
// 完成GL窗口/上下文创建后添加以下代码 GLenum glew_status = glewInit(); if (glew_status != GLEW_OK) { fprintf(stderr, "GLEW初始化失败: %s\n", glewGetErrorString(glew_status)); // 此处添加你的错误退出逻辑 }
- (可选)缺失GLEW库的处理
如果添加-lGLEW后仍然提示找不到libGLEW,说明你的系统没有安装GLEW开发包,Kali/Debian系系统可以用以下命令安装:
- (可选)缺失GLEW库的处理
sudo apt update && sudo apt install libglew-dev
内容的提问来源于stack exchange,提问作者Snakehater
相关产品推荐
相关产品推荐

