我正在为 armv7-a 设备使用 gcc 4.6(因为这是 ndk r9 上的默认设置)编译 ffmpeg,并且在运行使用 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
在谷歌上搜索后,似乎问题出在 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 - 崩溃
我将不胜感激任何帮助。
谢谢。