【发布时间】:2011-06-29 20:43:08
【问题描述】:
有没有办法增加共享对象中函数的符号范围?
我正在移植一个使用 glDrawTexiOES 的 OpenGL ES 1.x 示例,该示例在为我正在使用的板提供的 OpenGL ES 库中定义,但被定义为本地符号,因此当我编译 &链接示例,它给了我一个未定义的参考。
【问题讨论】:
有没有办法增加共享对象中函数的符号范围?
我正在移植一个使用 glDrawTexiOES 的 OpenGL ES 1.x 示例,该示例在为我正在使用的板提供的 OpenGL ES 库中定义,但被定义为本地符号,因此当我编译 &链接示例,它给了我一个未定义的参考。
【问题讨论】:
不幸的是,自动变量在内存中布局的本质是不可能的。 (它们不驻留在稳定的、永久的内存位置。)您唯一能做的就是分配一个全局变量,然后在某个合适的时间点将局部变量复制到全局变量中。但在这种情况下,您可能只使用全局变量。
不存在变量“成为全局”的特定时间点。全局变量必须在加载时为程序所知,并且在程序的整个生命周期中都存在。
【讨论】:
我认为如果不通过一些自定义程序或非常低级的 ELF 实用程序将库编辑为二进制文件,就不可能将本地符号的配置更改为全局。但我不建议将这种方法用于您要在生产中运行或打算维护的任何东西。
不过,我对 GL 也不太了解:
glDrawTexiOES 是本地的,因为它被视为库的实现细节。在这种情况下,作为本地符号,您不得使用它,因为库作者已明确拒绝您访问,因此可以随时更改其认为合适的签名和解释。
glDrawTexiOES 应该是全局的,因为它是 GL API 的一部分,并且您的板的 GL 库的作者未能通知链接器应该导出符号。如果是这种情况,您应该向上游报告错误。
【讨论】: