问题描述
我正在使用使用ffmpeg的Android应用程序。我已经交叉编译ffmpeg,它在大多数设备上都很好。但是在一些三星设备上,我正在加载libffmpeg-neon.so文件时遇到了致命的信号11。我已经重新编译了ffmpeg和调试符号( - 禁用剥离--enable-debug = 3
和 cflags + = -gstabs +
)并且具有堆栈跟踪:
09-24 12:30:48.564 505-564 /? D / CrashAnrDetector:Build:samsung / espresso10rfxx / espresso10rf:4.2.2 / JDQ39 / P5100XXDMJ2:user / release-keys
硬件:piranha
修订:9
Bootloader:unknown
收音机:未知
内核:Linux版本3.0.31-1919150(se.infra@SEP-107)(gcc版本4.4.1(Sourcery G ++ Lite 2010q1-202))#1 SMP PREEMPT Fri Oct 18 15:31 :19 KST 2013
*** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
构建指纹:'samsung / espresso10rfxx / espresso10rf:4.2.2 / JDQ39 / P5100XXDMJ2:user / release-keys'
修订:'9'
pid:5902,tid: 5902,名称:om.company.project>>>> com.company.project<<<<
信号11(SIGSEGV),代码1(SEGV_MAPERR),故障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 00 00000100000001 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 *,方法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 *,方法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 / link er
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_sync 或 kernelhelper
,所以我无法弄清楚出了什么问题。有什么想法吗?
PS。我试过 readelf -Ws libffmpeg-neon.so | grep 8b076c
,没有任何内容。
我发现了类似的问题( )和android错误报告()。所以似乎是libgcc错误(自2013年以来仍然没有修复)。
PS。通过在等待Google正常修复时重新编译ffmpeg与 ndk8c 和gcc 4.4.3
I'm working on android app that uses ffmpeg. I've cross-compiled ffmpeg and it's working good on most devices. But on some Samsung devices i'm having Fatal signal 11 while loading libffmpeg-neon.so file.
I've recompiled ffmpeg with debug symbols (--disable-stripping --enable-debug=3
and cflags += -gstabs+
) and have stack trace:
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
The problem is that i can't find check_for_sync
or kernelhelper
in ffmpeg sources so i can't figure out what's wrong. Any thoughts?
PS. I've tried readelf -Ws libffmpeg-neon.so | grep 8b076c
and nothing.
I've found similar question (Android gcc 4.6 crash on __check_for_sync8_kernelhelper - ARM - FFmpeg) and android bug report (https://code.google.com/p/android/issues/detail?id=58476). So it seems to be libgcc bug (still not fixed since 2013).
PS. Fixed by recompiling ffmpeg with ndk8c and gcc 4.4.3 while waiting for normal fix by Google
这篇关于android:libffmpeg-neon library加载:致命信号11的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!