使本地符号全球化

时间:2011-06-29 20:43:09

标签: c++ opengl-es linker g++

有没有办法在共享对象中扩充函数的符号范围?

我正在移植一个使用glDrawTexiOES的OpenGL ES 1.x示例,该示例在为我正在使用的板提供的OpenGL ES库中定义,但是被定义为本地符号,因此当我编译和放大时;链接示例,它给我一个未定义的引用。

2 个答案:

答案 0 :(得分:1)

不幸的是,自动变量在内存中布局的本质是不可能的。 (它们不驻留在稳定的永久内存位置。)您唯一能做的就是在某个适当的时候将全局变量和复制局部变量分配到全局变量中。但在这种情况下,你可能只是在整个过程中使用全局变量。

在变量“变为全局”的特定时间点上没有这样的东西。全局变量必须在加载时为程序所知,并且在程序的整个生命周期中都存在。

答案 1 :(得分:0)

我不相信可以将本地符号的处置更改为全局,而无需通过某些自定义程序或非常低级别的ELF实用程序将库编辑为二进制文件。但是,对于你将要在生产中运行或打算维护的任何东西,我都不会推荐这种方法。

我不太了解GL,但是:

  • glDrawTexiOES是本地的,因为它被认为是库的实现细节。在这种情况下,作为本地符号,您不得使用它,因为图书馆作者明确拒绝您访问,因此可以随时改变其签名和解释。

  • glDrawTexiOES应该是全局的,因为它是GL API的一部分,并且您的电路板的GL库的作者未能通知链接器应该导出该符号。如果是这种情况,您应该报告上游的错误。