MinGW编译GLFW出现Undefined reference error问题求助
GLFW链接错误:undefined reference 解决方法
问题描述
配置完GLFW和GLAD环境后,编译Makefile时出现链接错误,提示GLFW相关函数未定义:
../src/main.cpp:9: undefined reference to
glfwInit' ../src/main.cpp:10: undefined reference toglfwWindowHint'
...
使用的main.cpp代码:
#include <glad/glad.h> #include <GLFW/glfw3.h> #include <iostream> int main() { glfwInit(); glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3); glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3); glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); GLFWwindow* window = glfwCreateWindow(800, 600, "this is NOT a window!", NULL, NULL); if (window == NULL) { std::cout << "Failed to create GLFW window" << std::endl; glfwTerminate(); return -1; } glfwMakeContextCurrent(window); if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress)) { std::cout << "Failed to initialize GLAD" << std::endl; return -1; } while (!glfwWindowShouldClose(window)) { glfwPollEvents(); glClearColor(0.1f, 0.1f, 0.1f, 1.0f); glClear(GL_COLOR_BUFFER_BIT); glfwSwapBuffers(window); } glfwTerminate(); return 0; }
当前使用的编译命令:
g++ -g --std=c++17 -I../include -L../lib ../src/*.cpp ../src/glad.c -lglfw3dll -o main
解决步骤
1. 添加GLFW动态库宏定义
如果使用的是GLFW动态库版本,编译时必须定义GLFW_DLL宏,否则编译器会默认尝试链接静态库符号,导致匹配失败。在编译命令中加入-DGLFW_DLL参数。
2. 确认链接库顺序(已符合要求)
GCC链接器按从左到右顺序处理依赖,库文件必须放在依赖它的源文件之后。当前命令中-lglfw3dll的位置正确,若之前位置错误需调整到所有源文件之后。
修正后的编译命令
g++ -g --std=c++17 -DGLFW_DLL -I../include -L../lib ../src/*.cpp ../src/glad.c -lglfw3dll -o main
3. 额外检查项
- 确认
../lib目录下存在对应平台的GLFW动态库:Windows下为glfw3dll.lib(链接用)和glfw3.dll(运行用),Linux下为libglfw3dll.so - Windows环境下,运行程序时需将
glfw3.dll放在可执行文件同目录或系统PATH路径中 - 确保GLFW库的位数(32/64位)与编译器目标平台一致
内容的提问来源于stack exchange,提问作者Klayser
相关产品推荐
相关产品推荐

