无法链接 OpenGL 兼容性配置文件(无法识别 EXT 符号)

Posted

技术标签:

【中文标题】无法链接 OpenGL 兼容性配置文件(无法识别 EXT 符号)【英文标题】:Unable to link OpenGL compatibility profile (EXT symbols not recognized) 【发布时间】:2015-04-01 02:14:04 【问题描述】:

我决定使用GLEW 来处理扩展,而不是请求核心配置文件并且必须迁移我的代码。

作为第一步,我想通过EXT 配置文件添加对FBO's 的支持。

问题是 gcc 不会链接我的代码(OSX 10.10),它不识别任何gl*EXT() 函数。比如glBindFrameBufferEXT()

标记为未定义的符号。 (glBindFrameBuffer() 也是 无法识别...)

我链接到 GLEW 并尝试使用具有兼容性配置文件的 GLEXT 或 GLFW,但没有任何效果!我错过了图书馆吗?我如何告诉 gcc 使用正确的 GL 配置文件?我必须迁移到核心配置文件吗?

【问题讨论】:

【参考方案1】:

在 MacOS X 中 GLEW 做的不多,因为 MacOS X 上没有很多 OpenGL 扩展,并且由于 OpenGL 集成到 MacOS X 中的方式,可用框架支持的 OpenGL 版本的所有功能都立即可用

……如果您使用的是 MacOS X 的 OpenGL 实现不支持的扩展功能。

MacOS X 是 OpenGL 家族中的怪人:OpenGL 在操作系统的核心图形例程中的使用级别非常低,因此操作系统对 OpenGL 的支持非常好。但它在操作系统中构建得如此之深,以至于如果不更新整个操作系统就几乎无法更新。

解决方案:不要使用该扩展程序。 FBO 已与 OpenGL-3.3 一起引入,因此您必须创建一个 3.3 核心配置文件上下文并可以直接使用这些函数(不带 ...EXT)。

【讨论】:

感谢这些伟大的澄清!有没有办法使用 GL3.3 api 进行编译(例如可以访问 glGenFramebuffers() )但还没有迁移到核心配置文件?为了简便起见,我仍在使用一些固定的管道功能,并且现在不需要 GLSL 版本 gt 120。如果可能的话,我如何告诉 gcc 正确链接我的项目?非常感谢! @DanK:不幸的是(对你而言)在 MacOS X(和 alsa Mesa 的 BTW)中,OpenGL 实现兼容性配置文件受支持。这意味着:如果您需要 OpenGL-3 功能,例如 FBO,您别无选择,只能使用完整的 OpenGL-3 并留下遗留功能。 对于任何想了解 Mesa 和 FBO 的人:与不添加任何 OpenGL 扩展的 MacOS X 不同,除了一些 Apple 特定的扩展之外,Mesa确实实现了很多 OpenGL扩展,也可用于使用 Mesa 创建的 OpenGL-1.x 上下文。但是 Mesa 不支持 >=OpenGL-3.3 兼容性配置文件;它只支持核心配置文件。

以上是关于无法链接 OpenGL 兼容性配置文件(无法识别 EXT 符号)的主要内容,如果未能解决你的问题,请参考以下文章

Eclipse CDT 编辑器无法识别 OpenGL 扩展

我无法将我的 opengl 程序链接到 math3d.h

我的OpenGL学习进阶之旅解决Android OpenGL ES 调试工具 GAPID 无法识别Android设备的问题

我的OpenGL学习进阶之旅解决Android OpenGL ES 调试工具 GAPID 无法识别Android设备的问题

ie 导出不行,不兼容问题,或只出现后缀文件无法识别

实现通用链接时无法识别 JSON 文件