Sto sviluppando una libreria statica che acquisisce schermate e che le acquisisce dalle applicazioni OpenGL richiedono una gestione speciale.Debole collegamento C Funzione
Quando l'applicazione client si collega alla mia libreria statica deve aggiungere framework usati dalla mia libreria, per esempio per prendere screenshot di OpenGL, anche se l'app client non sta usando OpenGL deve collegarsi con OpenGLES.framework che è male. Sto cercando di verificare nella libreria se il client è collegato con OpenGLES.framework e abilitare dinamicamente la cattura di schermate da OpenGL.
Il problema è ottengo errore di compilazione quando si tenta di utilizzare le funzioni C come:
if(&glReadPixels != NULL) {
glReadPixels(0, 0, size.width, size.height, GL_RGBA, GL_UNSIGNED_BYTE, buffer);
}
Come potete vedere, posso controllare per il metodo di esistenza, ma come faccio a invocarlo di non causare errore di linker ? Quando compilo cliente con la mia libreria ottengo questo:
Undefined symbols for architecture i386:
"_glReadPixels", referenced from:
+[TakeScreenshotUtil takeOpenGLScreenshotWithContext:layerSize:] in libScr-iOS.a(TakeScreenshotUtil.o)
Sto cercando di utilizzare
__attribute__ ((weak))
ma non funziona (non cambia nulla).
Perché il collegamento a OpenGLES.framework è negativo? –
Non voglio forzare le app client a collegarsi con essa se non la usano. –