GLFW代码编译无报错但运行无任何输出无响应该如何解决?
问题原因
运行时缺少GLFW动态库文件
你编译时链接的是glfw3dll对应的导入库,编译阶段只需要导入库存在就能通过校验,但生成的exe运行时需要依赖对应版本的glfw3.dll文件。如果dll不在exe同级目录、也不在系统环境变量的可搜索路径内,Windows加载器会直接终止程序运行,不会执行任何代码,所以你开头的printf测试行也不会有任何输出。代码存在逻辑错误
你代码里if (!glfwInit)是错误写法:glfwInit是初始化函数,你没有加调用括号,相当于判断函数指针的地址是否为NULL,这个判断永远为假,即使GLFW初始化实际失败也不会触发报错分支。
修复方案
- 临时生效方案:将glfw预编译包内的
glfw3.dll文件复制到你生成的exe同级目录下,直接运行exe即可正常启动。 - 全局生效方案:将glfw预编译包内存放dll的文件夹路径添加到系统的Path环境变量,重启终端后运行exe就能正常找到依赖库,这也是你已经验证可行的方案。
- 修复代码逻辑:将初始化判断代码修改为:
if (!glfwInit()) { printf("glfw3 initialization failed"); return -1; }
另外你引入了glad头文件,建议在glfwMakeContextCurrent(window)之后添加glad加载代码gladLoadGLLoader((GLADloadproc)glfwGetProcAddress),避免后续调用OpenGL接口出现崩溃问题。
内容的提问来源于stack exchange,提问作者The Parallax
相关产品推荐
相关产品推荐

