You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

集成Conan库后调用glCreateShader抛出0xc0000005异常排查求助

问题根因

你遇到的0xc0000005 DEP违规 at 0x00000000本质是调用了空函数指针:崩溃时glCreateShader的函数指针值为0,CPU跳转到0地址执行代码触发了数据执行保护拦截。这个问题和PhysX、Conan本身没有直接关系,是OpenGL上下文与glad初始化、CMake配置两个层面的错误共同导致的。

排查修复步骤

1. 优先修复glad初始化逻辑(90%概率直接解决崩溃)

所有glad提供的OpenGL函数,必须满足两个前提才能正常调用:

  • 已经通过GLFW(或其他窗口库)创建了OpenGL上下文,且通过glfwMakeContextCurrent把上下文绑定到当前线程
  • 已经加载完OpenGL函数指针

你现在的代码里大概率漏了glad加载步骤,或者加载时机不对。在你的main函数里,创建完GLFW窗口、绑定上下文之后,必须加入这行代码:

if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress)) {
    throw std::runtime_error("Failed to initialize GLAD");
}

注意:这行代码必须放在glfwMakeContextCurrent之后,任何gl函数调用(包括glCreateShader、glGenVertexArrays这类)之前*。如果没加这行,glad里所有gl开头的函数指针都是默认值0,一调用就会跳转到0地址触发你看到的崩溃。

可以先加个简单验证:在调用glCreateShader之前打个断点,看一下glCreateShader这个函数指针的值,如果是0x0就坐实是初始化问题。

2. 修复CMake配置的结构性错误

你现在的CMake配置有几个明显的逻辑错误,虽然不是这次崩溃的直接原因,但后续一定会引发链接、运行时库冲突问题:

  • 目录与目标完全错位:你自己描述的架构是「engine模块是通用能力静态库,game模块是业务逻辑生成可执行文件」,但现在的配置完全反过来了:engine目录下的CMake在生成Game可执行文件,game目录下的CMake在生成Engine静态库,直接导致根CMake的add_subdirectory顺序错误——根CMake先执行add_subdirectory(engine)时,Engine库目标还没被定义,链接时会出现隐式规则问题,甚至可能错误链接到系统里同名的旧库。
    修复方式:把两个目录下的CMakeLists.txt互换位置:
    • 生成Engine静态库的CMake放到engine目录下,去掉里面所有../engine/的冗余相对路径
    • 生成Game可执行文件的CMake放到game目录下
    • 根目录CMake调整add_subdirectory顺序:先加所有第三方库,再加engine,最后加game(因为game依赖engine,必须等engine目标定义完再处理game子目录)
  • 重复调用Conan配置:不需要在两个子模块里都写include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake)和conan_basic_setup(),把这两行移到根目录CMake里,在所有add_subdirectory之前调用一次就行,重复调用会覆盖编译选项,容易导致运行时库(/MT、/MD)不匹配的问题。
  • 无意义的编译指令:shader.cpp是源文件,开头不要加#pragma once,这是头文件用的编译指令,写在cpp里没有任何作用,还可能误导编译器。

3. 额外排查点

如果做完上面两步还是崩溃,检查两个点:

  • 确认你用的glad是和GLFW创建的OpenGL版本匹配的(比如你要开OpenGL 4.3核心模式,glad生成的时候也要选对应版本,不要选低版本的glad加载高版本上下文)
  • 检查链接的glad库是不是你自己externalCode/glad下编译的版本,不要和系统里其他glad、opengl32库冲突,链接时把opengl相关的库放在依赖列表最后即可。

内容的提问来源于stack exchange,提问作者Jonas Schindler

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 17:36:28