2013-09-30 10 views
6

Dodałem libpng do mojej aplikacji. Jeśli zbuduję symulator, wszystko jest w porządku. Kiedy zbudować aplikację dla urządzenia, mam błąd linkera:iPhone - urządzenie - błąd linkera

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

Mam zbudować libpng ręcznie ze źródła, tak samo dla symulatora i urządzenia (tylko ze zmienionym cel kompilacji). Próbowałem znaleźć ten problem, ale nikt nie opublikował niczego na temat tego problemu.

Odpowiedz

7

I "rozwiązać" ten zastępując linie 117-121 w libpng „s pngpriv.h:

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

przez

#define PNG_ARM_NEON_OPT 0 

Wyłącza optymalizacje NEON ARM, co wydaje się być przyczyną problem.

To tylko obejście, chociaż nie miałem czasu, aby dokładniej zbadać prawdziwą przyczynę problemu.

+2

Potrzebujesz kompilacji plików * .c z folderu ramienia. – PSyton

+3

możesz także po prostu skompilować z flagą preprocesora "PNG_ARM_NEON_OPT = 0", więc nie musisz modyfikować źródła libpng – bitwise

+0

Czy musimy skompilować * .c po zrobieniu zmiany w .h i jak? –

0

Dodajemy do komentarza PSytona, oto jak go rozwiązaliśmy. Skompiluj pliki arm/*.c. To jednak działa tylko dla Androida. Dla iOS, mamy dodatkowo musiał utworzyć nowy pnglibconf.h z zapisami:

#undef PNG_ARM_NEON_API_SUPPORTED 
#undef PNG_ARM_NEON_CHECK_SUPPORTED 
#define PNG_ARM_NEON_OPT 0 

Patrząc na ARM określa w libpng, wydaje się, że są one nieco buggy obecnie, jak PNG_ARM_NEON_API_SUPPORTED powinna być wystarczająca, aby włączyć NEON kompilację off .

Powiązane problemy