2

armv7-a デバイス用に gcc 4.6 で ffmpeg をコンパイルしています (これは ndk r9 のデフォルトであるため)。gcc 4.4.3 でコンパイルされたコードを実行すると発生しなかった特定のデバイスで奇妙なクラッシュが発生します。

これはバックトレースです:

08-02 18:36:08.200: I/sec_anm_ahi_output(1535): setParameters(stop_output_streamtype=1)
08-02 18:36:08.360: I/DEBUG(18804):          #00  pc 000162a0  /system/lib/libc.so (__libc_android_abort)
08-02 18:36:08.360: I/DEBUG(18804):          #01  pc 00418334  /data/data/com.ffmpeg.android/lib/libffmpeg.so (__check_for_sync8_kernelhelper)
08-02 18:36:08.360: I/DEBUG(18804): libc base address: afd00000

Googleで検索した後、問題は64ビットアトミックにあるようです.私のコンパイルされたコードはdmb命令を使用していないようで、代わりにkernelhelperを呼び出しています:

https://code.google.com/p/android/issues/detail?id=41297

http://www.ogre3d.org/forums/viewtopic.php?f=21&t=78199

回避策はarmv7-a用にコンパイルすることですが、すでに同じ結果でこれを行っています。これらは私が使用しているフラグです:

CPU=armv7-a
OPTIMIZE_CFLAGS="-march=$CPU -mcpu=cortex-a8 -mfpu=neon -mfloat-abi=softfp -mthumb -D__thumb__"
EXTRA_LDFLAGS="-Wl,--fix-cortex-a8 -march=armv7-a"
PREFIX=./android/$CPU 
EXTRA_CONFIGURE=""

私もこれらを試しましたが、同じ結果になりました:

CPU=armv7-a
OPTIMIZE_CFLAGS="-march=$CPU -mcpu=cortex-a8 -mfpu=neon -mfloat-abi=softfp -mthumb -D__thumb__"
EXTRA_LDFLAGS="-Wl,--fix-cortex-a8 -march=armv7-a"
PREFIX=./android/$CPU 
EXTRA_CONFIGURE="--disable-armv5te --disable-armv6 --disable-armv6t2"

さまざまなデバイスでテストしましたが、結果は次のとおりです。

Nexus 4 - クラッシュなし

Nexus 7 - クラッシュなし

Galaxy sII - クラッシュ

ギャラクシー エース 2 - クラッシュ

助けていただければ幸いです。

ありがとう。

4

0 に答える 0