安卓:libffmpeg氖库加载:致命信号11(android: libffmpeg-neon li

2019-10-21 01:39发布

我正在使用ffmpeg的Android应用程序。 我交叉编译的ffmpeg,它的工作对大多数设备良好。 但在某些三星设备我遇到致命的信号11而加载libffmpeg-neon.so文件。

我已经重新编译的ffmpeg使用调试符号( --disable-stripping --enable-debug=3cflags += -gstabs+ ),并且堆栈跟踪:

09-24 12:30:48.564 505-564/? D/CrashAnrDetector﹕ Build: samsung/espresso10rfxx/espresso10rf:4.2.2/JDQ39/P5100XXDMJ2:user/release-keys
Hardware: piranha
Revision: 9
Bootloader: unknown
Radio: unknown
Kernel: Linux version 3.0.31-1919150 (se.infra@SEP-107) (gcc version 4.4.1 (Sourcery G++ Lite 2010q1-202) ) #1 SMP PREEMPT Fri Oct 18 15:31:19 KST 2013
*** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
Build fingerprint: 'samsung/espresso10rfxx/espresso10rf:4.2.2/JDQ39/P5100XXDMJ2:user/release-keys'
Revision: '9'
pid: 5902, tid: 5902, name: om.company.project >>> com.company.project <<<
signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr deadbaad
r0 00000027 r1 deadbaad r2 401d5258 r3 00000000
r4 00000000 r5 beffb36c r6 00000004 r7 41217400
r8 00000000 r9 409d21b0 sl 4005cb58 fp 00000001
ip 5f6b5468 sp beffb368 lr 401a854d pc 401a4be2 cpsr 60000030
d0 65706d666662696c d1 732e6e6f656e2d67
d2 732e30323763692e d3 2f312d6c6f6f6863
d4 0000000000000000 d5 3f80000000000000
d6 3f80000000000000 d7 3f8000003f800000
d8 0000000000000000 d9 0000000000000000
d10 0000000000000000 d11 0000000000000000
d12 0000000000000000 d13 0000000000000000
d14 0000000000000000 d15 0000000000000000
d16 0000000800000007 d17 003926e90036320b
d18 003f10a5003c1bc7 d19 0044fa6100420583
d20 006e401c00628019 d21 0085c022007a001f
d22 0707070703030303 d23 0000002e0000002b
d24 009d80280091c025 d25 00b5402e00a9402b
d26 0000002700000024 d27 0000002d0000002a
d28 006e400000628000 d29 0085c000007a0000
d30 0000000100000001 d31 0000000100000001
scr 60000090
backtrace:
#00 pc 0001abe2 /system/lib/libc.so
#01 pc 00018208 /system/lib/libc.so (abort+4)
#02 pc 008b076c /data/app-lib/com.company.project-1/libffmpeg-neon.so (__check_for_sync8_kernelhelper+68)
#03 pc 000032b3 /system/bin/linker
#04 pc 0000510b /system/bin/linker
#05 pc 0004f973 /system/lib/libdvm.so (dvmLoadNativeCode(char const*, Object*, char**)+186)
#06 pc 0006681d /system/lib/libdvm.so
#07 pc 000276e0 /system/lib/libdvm.so
#08 pc 0002b5c4 /system/lib/libdvm.so (dvmInterpret(Thread*, Method const*, JValue*)+184)
#09 pc 0005fc79 /system/lib/libdvm.so (dvmCallMethodV(Thread*, Method const*, Object*, bool, JValue*, std::__va_list)+272)
#10 pc 0005fca3 /system/lib/libdvm.so (dvmCallMethod(Thread*, Method const*, Object*, JValue*, ...)+20)
#11 pc 0006ad49 /system/lib/libdvm.so (dvmInitClass+1036)
#12 pc 000225dc /system/lib/libdvm.so (dvmAsmSisterStart+412)
#13 pc 0002b5c4 /system/lib/libdvm.so (dvmInterpret(Thread*, Method const*, JValue*)+184)
#14 pc 0005ff4f /system/lib/libdvm.so (dvmInvokeMethod(Object*, Method const*, ArrayObject*, ArrayObject*, ClassObject*, bool)+374)
#15 pc 00067879 /system/lib/libdvm.so
#16 pc 000276e0 /system/lib/libdvm.so
#17 pc 0002b5c4 /system/lib/libdvm.so (dvmInterpret(Thread*, Method const*, JValue*)+184)
#18 pc 0005fc79 /system/lib/libdvm.so (dvmCallMethodV(Thread*, Method const*, Object*, bool, JValue*, std::__va_list)+272)
#19 pc 00049a43 /system/lib/libdvm.so
#20 pc 00047f43 /system/lib/libandroid_runtime.so
#21 pc 000492df /system/lib/libandroid_runtime.so (android::AndroidRuntime::start(char const*, char const*)+390)
#22 pc 00000db7 /system/bin/app_process
#23 pc 0001287f /system/lib/libc.so (__libc_init+38)
#24 pc 00000ae8 /system/bin/app_process
stack:
beffb328 400eea98
beffb32c 400ede0c
beffb330 400ebcf8 /system/bin/linker
beffb334 400ebf40 /system/bin/linker
beffb338 400ec4f4
beffb33c 400eb0ac /system/bin/linker
beffb340 401d2254 /system/lib/libc.so
beffb344 401d21b4 /system/lib/libc.so
beffb348 00000000
beffb34c 401a854d /system/lib/libc.so (_fwalk+32)
beffb350 00000001
beffb354 beffb36c [stack]
beffb358 00000004
beffb35c 41217400 [heap]
09-24 12:30:48.564 505-564/? D/CrashAnrDetector﹕ processName:com.company.project

问题是,我无法找到check_for_synckernelhelper在FFmpeg的源代码,所以我无法弄清楚什么是错的。 有什么想法吗?

PS。 我试过readelf -Ws libffmpeg-neon.so | grep 8b076c readelf -Ws libffmpeg-neon.so | grep 8b076c并没有什么。

Answer 1:

我发现类似的问题( 安卓GCC上__check_for_sync8_kernelhelper 4.6崩溃- ARM - FFmpeg的 )和Android bug报告( https://code.google.com/p/android/issues/detail?id=58476 )。 因此,它似乎是libgcc中的bug(仍然没有固定的自2​​013年起)。

PS。 通过重新编译与ndk8c和gcc 4.4.3的ffmpeg,同时通过谷歌等正常修复固定



文章来源: android: libffmpeg-neon library loading: Fatal signal 11