Pio*_*ach 5 iphone objective-c ios
我正在开发采用截图的静态库,从OpenGL应用程序中获取它们需要特殊处理.
当客户端应用程序链接到我的静态库时,它必须添加我的库使用的框架,例如采用OpenGL截图,即使客户端应用程序不使用OpenGL,它也必须链接OpenGLES.framework,这是不好的.我试图检查库是否客户端已与OpenGLES.framework链接并动态启用从OpenGL截取屏幕截图.
问题是当我尝试使用C函数时出现编译错误:
if(&glReadPixels != NULL) {
glReadPixels(0, 0, size.width, size.height, GL_RGBA, GL_UNSIGNED_BYTE, buffer);
}
Run Code Online (Sandbox Code Playgroud)
如您所见,我可以检查方法是否存在,但是如何调用它以不导致链接器错误?当我用我的库编译客户端时,我得到了这个:
Undefined symbols for architecture i386:
"_glReadPixels", referenced from:
+[TakeScreenshotUtil takeOpenGLScreenshotWithContext:layerSize:] in libScr-iOS.a(TakeScreenshotUtil.o)
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用
__attribute__ ((weak))
Run Code Online (Sandbox Code Playgroud)
但它不起作用(不会改变任何东西).
小智 1
您可以打开正在执行的应用程序并检查它是否链接到OpenGL。首先,使用 -rdynamic(或 Apple 的 GCC 理解的任何等效项)重新编译您的应用程序。然后使用下面的代码来查找函数:
#import <dlfcn.h>
void (*_glReadPixels)(int, int, float, float, int, int, void *);
_glReadPixels = dlsym(NULL, "glReadPixels");
if (_glReadPixels != NULL) {
/* take screenshot */
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
731 次 |
| 最近记录: |