2

我正在为 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 - 崩溃

我将不胜感激任何帮助。

谢谢。

4

0 回答 0