Tworzę bibliotekę statyczną, która wykonuje zrzuty ekranu, a pobieranie ich z aplikacji OpenGL wymaga specjalnej obsługi.Słabe połączenie funkcji C
Gdy aplikacja kliencka łączy się z moją biblioteką statyczną, musi dodać ramy używane przez moją bibliotekę, na przykład do wykonywania zrzutów ekranu OpenGL, nawet jeśli aplikacja kliencka nie korzysta z OpenGL, musi łączyć się z OpenGLES.framework, która jest zła. Próbuję sprawdzić w bibliotece, czy klient połączył się z OpenGLES.framework i dynamicznie włącza wykonywanie zrzutów ekranu z OpenGL.
Problem polega na tym dostaję błąd kompilacji, gdy próbuję użyć funkcji C jak:
if(&glReadPixels != NULL) {
glReadPixels(0, 0, size.width, size.height, GL_RGBA, GL_UNSIGNED_BYTE, buffer);
}
Jak widać, można sprawdzić metodą istnienia, ale w jaki sposób powołać go do nie spowodować błąd linkera ? Kiedy skompilować klienta z mojej biblioteki uzyskać to:
Undefined symbols for architecture i386:
"_glReadPixels", referenced from:
+[TakeScreenshotUtil takeOpenGLScreenshotWithContext:layerSize:] in libScr-iOS.a(TakeScreenshotUtil.o)
Próbuję użyć
__attribute__ ((weak))
ale to nie działa (niczego nie zmienia).
Dlaczego łączenie z OpenGLES.framework jest złe? –
Nie chcę wymuszać na aplikacjach klienckich łączenia się z nim, jeśli go nie używają. –