2013-09-30 29 views
6

私は自分のアプリケーションにlibpngを追加しました。私がシミュレータ用にビルドするならば、すべてがOKです。私は、デバイス用のアプリケーションをビルドすると、私は、リンカエラーを得た:Iphone - device - linkerエラー

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

私は(唯一のコンパイルの変更ターゲットで)、ソースから手動でlibpngをシミュレータとデバイスのための同じ方法を構築してきました。私はこの問題を見つけようとしましたが、誰もこの問題について何も投稿していないようです。

答えて

7

私はlibpngさんpngpriv.hにライン117-121を置き換えることで、これを "解決":

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

#define PNG_ARM_NEON_OPT 0 

によってこれが原因であるように思われ、ARMのNEONの最適化を無効にします問題。

これは単に回避策に過ぎませんが、問題の実際の原因をさらに調査する時間がありませんでした。

+2

アームフォルダから* .cファイルをコンパイルする必要があります。 – PSyton

+3

プリプロセッサフ​​ラグ "PNG_ARM_NEON_OPT = 0"でコンパイルすることもできますので、libpngソースを変更する必要はありません – bitwise

+0

.hを変更して* .cをコンパイルする必要がありますか? –

0

PSytonのコメントに加えて、ここで解決しました。 arm/*.cファイルをコンパイルします。これはAndroid用にのみ機能します。 iOSのために、私たちはさらにエントリーで新しいpnglibconf.hを作成する必要がありました:ARMを見て

#undef PNG_ARM_NEON_API_SUPPORTED 
#undef PNG_ARM_NEON_CHECK_SUPPORTED 
#define PNG_ARM_NEON_OPT 0 

はlibpngの中で定義され、彼らは現在、ビットバギーいるようPNG_ARM_NEON_API_SUPPORTEDがオフNEONのコンパイルを有効にするのに十分であるべきと、それは、そうです。

関連する問題