Je développe une bibliothèque statique qui prend des captures d'écran, et les prendre à partir d'applications OpenGL nécessite une manipulation spéciale. Lorsque l'application cliente se connecte à ma bibliothèque statique, elle doit ajouter des frameworks utilisés par ma bibliothèque, par exemple pour prendre des captures d'écran OpenGL, même si l'application cliente n'utilise pas OpenGL, elle doit se lier avec OpenGLES.framework qui est mauvais. J'essaye de vérifier dans la bibliothèque si le client a lié avec OpenGLES.framework et permettez dynamiquement de prendre des screenshots d'OpenGL.Fonction de liaison C faible
Le problème est que j'obtiens l'erreur de compilation lorsque je tente d'utiliser les fonctions C comme:
if(&glReadPixels != NULL) {
glReadPixels(0, 0, size.width, size.height, GL_RGBA, GL_UNSIGNED_BYTE, buffer);
}
Comme vous pouvez le voir, je peux vérifier l'existence de la méthode, mais comment puis-je l'invoquons pour ne pas provoquer erreur de liens ? Quand je compile client avec ma bibliothèque, je reçois ceci:
Undefined symbols for architecture i386:
"_glReadPixels", referenced from:
+[TakeScreenshotUtil takeOpenGLScreenshotWithContext:layerSize:] in libScr-iOS.a(TakeScreenshotUtil.o)
Je suis en train d'utiliser
__attribute__ ((weak))
mais il ne fonctionne pas (ne change rien).
Pourquoi la liaison avec OpenGLES.framework est-elle mauvaise? –
Je ne veux pas forcer les applications clientes à se lier avec elles si elles ne l'utilisent pas. –