OpenXR调用xrCreateSpatialGraphNodeSpaceMSFT提示未解析外部符号求助
问题根因
xrCreateSpatialGraphNodeSpaceMSFT 属于微软定制的OpenXR厂商扩展API,不属于OpenXR核心标准接口,OpenXR加载器默认不会导出该函数的符号,你直接调用函数名的写法必然会报未解析外部符号错误,和你用的头文件、加载器版本无关。
修复步骤
- 第一步:创建XrInstance时,必须先枚举当前运行时支持的扩展列表,确认
XR_MSFT_spatial_graph_node扩展存在后,显式将该扩展加入启用列表,否则后续无法获取到对应函数指针。 - 第二步:不要直接调用xrCreateSpatialGraphNodeSpaceMSFT函数,需先通过核心API
xrGetInstanceProcAddr获取该扩展的函数指针后再调用,示例代码如下:
// 先定义对应函数指针变量 PFN_xrCreateSpatialGraphNodeSpaceMSFT pfnCreateSpatialGraphNodeSpace = nullptr; // 从实例获取扩展函数地址 XrResult result = xrGetInstanceProcAddr( m_instance, "xrCreateSpatialGraphNodeSpaceMSFT", reinterpret_cast<PFN_xrVoidFunction*>(&pfnCreateSpatialGraphNodeSpace) ); // 需校验result返回成功,且指针不为空后再使用
- 第三步:修正你现有代码里的其他致命问题:
- 你声明的
XrSpatialGraphNodeSpaceCreateInfoMSFT* create_info{}是空指针,直接给成员赋值会触发内存访问崩溃,不要声明为指针,直接在栈上分配结构体即可。 - memcpy复制guid的逻辑错误,不要只取g_data.Data1复制,直接把整个guid结构体完整复制到nodeId字段即可。
- 你声明的
修正后的完整调用示例:
// 先确保已拿到有效的pfnCreateSpatialGraphNodeSpace函数指针 xr::SpaceHandle target_space{}; XrSpatialGraphNodeSpaceCreateInfoMSFT create_info{}; create_info.type = XR_TYPE_SPATIAL_GRAPH_NODE_SPACE_CREATE_INFO_MSFT; create_info.next = nullptr; guid_ g_data{ code }; create_info.nodeType = XR_SPATIAL_GRAPH_NODE_TYPE_STATIC_MSFT; memcpy(create_info.nodeId, &g_data, sizeof(guid_)); XrResult res = pfnCreateSpatialGraphNodeSpace(m_session.Get(), &create_info, target_space.Put()); // 校验res返回值
内容的提问来源于stack exchange,提问作者Lucas Hoof
相关产品推荐
相关产品推荐

