MinGW g++编译C++代码无法链接glfw3.lib的问题问询
问题根本原因
你当前使用的是Visual Studio编译生成的MSVC格式.lib静态库,MinGW的ld链接器默认无法直接识别该格式,同时你的链接参数写法也存在错误。
可行解决方案
方案1:使用MinGW版本GLFW预编译库(最稳妥)
- 下载对应MinGW版本的GLFW预编译包,解压后找到和你的MinGW架构(32位/64位)匹配的
libglfw3.a或libglfw3dll.a文件 - 替换原有vc2019库路径为MinGW版GLFW的lib路径,修改编译命令如下:
g++ -o Test main.cpp -I C:\Users\Shaurya\Documents\Opengl\Dependencies\GLFW\include -L <替换为MinGW版GLFW的lib路径> -lglfw3 -lopengl32 -lgdi32 -luser32 -lkernel32
- 注意MinGW下
-l参数不需要加.lib后缀,会自动查找前缀为lib、后缀为.a的库文件,同时GLFW运行需要依赖Windows系统的几个基础图形库,必须加上末尾的几个链接参数。
方案2:转换现有MSVC格式lib为MinGW可用格式
如果不想重新下载GLFW,可通过工具转换当前的.lib文件:
- 确保你的MinGW环境已安装
pexports和dlltool工具(dlltool一般默认自带,pexports可通过MinGW包管理器安装) - 找到对应版本的GLFW dll文件,执行命令导出def定义文件:
pexports glfw3.dll > glfw3.def - 执行命令生成MinGW可识别的.a静态库:
dlltool -d glfw3.def -l libglfw3.a - 将生成的
libglfw3.a放到你的库路径下,再用方案1中的编译命令编译即可。
方案3:直接指定lib完整路径编译
如果嫌转格式麻烦,也可以直接把.lib文件的完整路径当作普通输入文件传给g++,不需要用-l参数:
g++ -o Test main.cpp -I C:\Users\Shaurya\Documents\Opengl\Dependencies\GLFW\include C:\Users\Shaurya\Documents\Opengl\Dependencies\GLFW\lib-vc2019\glfw3.lib -lopengl32 -lgdi32 -luser32 -lkernel32
该方法仅对部分兼容的MSVC静态库有效,若仍报错优先选择方案1。
代码修正提示
你的代码中主循环的判断条件写反了,当前逻辑是窗口需要关闭时才执行循环,会导致窗口一闪就退出,正确写法如下:
while(!glfwWindowShouldClose(window)){ glfwSwapBuffers(window); glfwPollEvents(); }
内容的提问来源于stack exchange,提问作者SHikha Mittal
相关产品推荐
相关产品推荐

