我正在开发获取屏幕截图的静态库,并且从 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);
}
如您所见,我可以检查方法是否存在,但是如何调用它才不会导致链接器错误?当我用我的库编译客户端时,我得到了这个:
Undefined symbols for architecture i386:
"_glReadPixels", referenced from:
+[TakeScreenshotUtil takeOpenGLScreenshotWithContext:layerSize:] in libScr-iOS.a(TakeScreenshotUtil.o)
我正在尝试使用
__attribute__ ((weak))
但它不起作用(不会改变任何东西)。