2013-09-30 15 views
6

Ich habe libpng zu meiner Anwendung hinzugefügt. Wenn ich für Simulator baue, ist alles in Ordnung. Wenn ich Anwendung für das Gerät zu bauen, bekam ich Linkerfehler:Iphone - Gerät - Linker Fehler

Undefined symbols for architecture armv7: "_png_init_filter_functions_neon", referenced from: _png_read_filter_row in libpng-arm7-release.a(pngrutil.o) 

Ich baue haben libpng manuell von der Quelle, die gleiche Art und Weise für Simulator und Gerät (nur mit verändertem Ziel Kompilierung). Ich habe versucht, dieses Problem zu finden, aber niemand scheint etwas über dieses Problem zu veröffentlichen.

Antwort

7

I "gelöst" dies durch die Linien 117-121 in libpng ‚s pngpriv.h ersetzt:

# ifdef __ARM_NEON__ 
#  define PNG_ARM_NEON_OPT 2 
# else 
#  define PNG_ARM_NEON_OPT 0 
# endif 

von

#define PNG_ARM_NEON_OPT 0 

Dies deaktiviert ARM NEON Optimierungen, die die Ursache für die zu sein scheint Problem.

Dies ist nur ein Workaround, aber ich hatte keine Zeit, um die eigentliche Ursache des Problems weiter zu untersuchen.

+2

Sie müssen * .c Dateien aus dem Armordner kompilieren. – PSyton

+3

Sie können auch nur mit Präprozessor-Flag "PNG_ARM_NEON_OPT = 0" kompilieren, so dass Sie nicht müssen libpng Quelle – bitwise

+0

ändern Müssen wir * .c kompilieren nach Änderung in .h, und wie? –

0

Hinzufügen zu PSyton Kommentar, hier ist, wie wir es gelöst haben. Kompilieren Sie die arm/*.c Dateien. Dies funktioniert jedoch nur für Android. Für iOS, hatten wir zusätzlich eine neue pnglibconf.h mit den Einträgen zu erstellen:

#undef PNG_ARM_NEON_API_SUPPORTED 
#undef PNG_ARM_NEON_CHECK_SUPPORTED 
#define PNG_ARM_NEON_OPT 0 

auf der ARM-Suche definiert in libpng, scheint es, als wären sie ein bisschen Buggy zur Zeit sind, wie PNG_ARM_NEON_API_SUPPORTED ausreichend sein sollte, NEON Kompilation auszuschalten .