Процесс завершается сигналом вызова части ffmpeg в проекте Android NDK - PullRequest
2 голосов
/ 14 марта 2012

Согласно этой записи в блоге Я создал свой проект Android ffmpeg. Я написал нативный код из своего Java-кода со статической библиотекой и функциями jni. Когда я запускаю эту часть кода, я получаю следующий logcat, есть ли идеи, почему мой процесс прерывается по сигналу?

03-14 11:16:06.488: I/DEBUG(31): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** 03-14 11:16:06.488: I/DEBUG(31): Build fingerprint: generic/google_sdk/generic:2.3.4/GINGERBREAD/123630:eng/test-keys' 03-14 11:16:06.488: I/DEBUG(31): pid: 377, tid: 377 >>> com.testffmpeg <<< 03-14 11:16:06.488: I/DEBUG(31): signal 4 (SIGILL), code 1 (ILL_ILLOPC), fault addr 80a98f10 03-14 11:16:06.488: I/DEBUG(31): r0 002b0030 r1 80b1c410 r2 00030d40 r3 00000000 03-14 11:16:06.488: I/DEBUG(31): r4 00000000 r5 002b0030 r6 00000010 r7 00000010 03-14 11:16:06.488: I/DEBUG(31): r8 be877308 r9 7fffffff 10 80b1bea0 fp 00000000 03-14 11:16:06.488: I/DEBUG(31): ip be8772f0 sp be8772d0 lr 80a99d64 pc 80a98f10 cpsr 60000010 03-14 11:16:06.568: I/DEBUG(31): #00 pc 00298f10 /data/data/com.testffmpeg/lib/libffmpeg.so 03-14 11:16:06.568: I/DEBUG(31): #01 lr 80a99d64 /data/data/com.testffmpeg/lib/libffmpeg.so 03-14 11:16:06.568: I/DEBUG(31): code around pc: 03-14 11:16:06.568: I/DEBUG(31): 80a98ef0 eaffff9e 0009304c fffeffe4 e92d4010 03-14 11:16:06.568: I/DEBUG(31): 80a98f00 e24dd020 e28dc020 e3a04000 e1cd20f8 03-14 11:16:06.568: I/DEBUG(31): 80a98f10 e3003000 e52c4004 e3a02000 e3433ff0 03-14 11:16:06.568: I/DEBUG(31): 80a98f20 e58dc010 e3a0c001 e58dc000 ebffff77 03-14 11:16:06.568: I/DEBUG(31): 80a98f30 e1500004 b1a00004 a59d001c e28dd020 03-14 11:16:06.568: I/DEBUG(31): code around lr: 03-14 11:16:06.568: I/DEBUG(31): 80a99d44 ed947b04 e1a00005 e5941000 eefd7bc7 03-14 11:16:06.568: I/DEBUG(31): 80a99d54 ee17ca90 e1a0200c e1a03fc2 ebfffc65 03-14 11:16:06.568: I/DEBUG(31): 80a99d64 eaffffb8 e1c421d0 e1a00008 e58d9000 03-14 11:16:06.568: I/DEBUG(31): 80a99d74 eb0008cc e1a00005 e5941000 e898000c 03-14 11:16:06.568: I/DEBUG(31): 80a99d84 ebfffc6e eaffffaf e1a00005 e3a01030 03-14 11:16:06.568: I/DEBUG(31): stack: 03-14 11:16:06.568: I/DEBUG(31): be877290 001f9a98 [heap] 03-14 11:16:06.568: I/DEBUG(31): be877294 0008ced8 [heap] 03-14 11:16:06.568: I/DEBUG(31): be877298 00000005<br> 03-14 11:16:06.578: I/DEBUG(31): be87729c a8114ca9 /system/lib/libutils.so 03-14 11:16:06.578: I/DEBUG(31): be8772a0 001f9a48 [heap] 03-14 11:16:06.578: I/DEBUG(31): be8772a4 be8772cc<br> 03-14 11:16:06.578: I/DEBUG(31): be8772a8 fffffffc<br> 03-14 11:16:06.578: I/DEBUG(31): be8772ac 00000000<br> 03-14 11:16:06.578: I/DEBUG(31): be8772b0 be8772cc<br> 03-14 11:16:06.578: I/DEBUG(31): be8772b4 a821a33d /system/lib/libbinder.so 03-14 11:16:06.578: I/DEBUG(31): be8772b8 00271270 [heap] 03-14 11:16:06.578: I/DEBUG(31): be8772bc a821a9d5 /system/lib/libbinder.so 03-14 11:16:06.578: I/DEBUG(31): be8772c0 00000030<br> 03-14 11:16:06.578: I/DEBUG(31): be8772c4 00000000<br> 03-14 11:16:06.578: I/DEBUG(31): be8772c8 df002777<br> 03-14 11:16:06.578: I/DEBUG(31): be8772cc e3a070ad<br> 03-14 11:16:06.578: I/DEBUG(31): #00 be8772d0 00000000<br> 03-14 11:16:06.578: I/DEBUG(31): be8772d4 afd10f08 /system/lib/libc.so 03-14 11:16:06.578: I/DEBUG(31): be8772d8 00030d40 [heap] 03-14 11:16:06.578: I/DEBUG(31): be8772dc 00000000<br> 03-14 11:16:06.578: I/DEBUG(31): be8772e0 000000da<br> 03-14 11:16:06.578: I/DEBUG(31): be8772e4 00000008<br> 03-14 11:16:06.578: I/DEBUG(31): be8772e8 000001b4<br> 03-14 11:16:06.578: I/DEBUG(31): be8772ec c0000000<br> 03-14 11:16:06.578: I/DEBUG(31): be8772f0 80b24938 /data/data/com.testffmpeg/lib/libffmpeg.so 03-14 11:16:06.578: I/DEBUG(31): be8772f4 80a99d64 /data/data/com.testffmpeg/lib/libffmpeg.so 03-14 11:16:06.578: I/DEBUG(31): be8772f8 00000000<br> 03-14 11:16:06.578: I/DEBUG(31): be8772fc afd1386d /system/lib/libc.so 03-14 11:16:06.578: I/DEBUG(31): be877300 00000000<br> 03-14 11:16:06.578: I/DEBUG(31): be877304 80b1be7c /data/data/com.testffmpeg/lib/libffmpeg.so 03-14 11:16:06.578: I/DEBUG(31): be877308 002b0028 [heap] 03-14 11:16:06.578: I/DEBUG(31): be87730c 00000000<br> 03-14 11:16:06.578: I/DEBUG(31): be877310 00000003<br> 03-14 11:16:06.578: I/DEBUG(31): be877314 00000000<br> 03-14 11:16:07.118: D/Zygote(33): Process 377 terminated by signal (4)

1 Ответ

5 голосов
/ 15 марта 2012

Я бы сказал, что вам следует проверить, совместимы ли флаги компилятора, которые вы передаете цепочке инструментов android ndk при компиляции ваших библиотек, с устройством, на котором вы тестируете.означает, что вы выполняете недопустимую инструкцию, см. здесь .

ПК (регистр счетчика программ) указывает на адрес 80a98f10.В дамп памяти этого адреса есть следующие данные e3003000.Я бы сказал, что эта инструкция доставляет вам проблемы (я не знаю, какая это инструкция, поскольку я не знаю, как декодировать шестнадцатеричные инструкции ARM).

Если вы хотите больше подсказок, вы можете использовать Googlendk objdump (см. /your-ndk-folder/toolchains/arm-eabi-4.4.0/prebuilt/linux-x86/bin/arm-eabi-objdump).Эта программа может разобрать вашу библиотеку, если вы выполните:

arm-eabi-objdump -D yourLib.so

Получите выходные данные и найдите строку e300.Тогда вы увидите, что это за инструкция, и зная, что она может дать вам представление о том, что происходит.

Надеюсь, это поможет.

...