@IvaToa10

Как исправить ошибку SIGSEGV (SEGV_MAPERR) на Android?

Добрый день!

Стоит задача - использовать c++ библиотеку из другого Android-приложения, написанного не мной.

Сама библиотека устроена так:
1. Там есть методы на c++, по типу Java_com_, к которым мы подключаемся из java.
2. Есть методы на java, к которым обращается код из c++.

К библиотеке подключаюсь, часть методов работает.
А потом выдает такую ошибку.

10-23 15:32:07.262 29631-29674/com.test.test A/libc: Fatal signal 11 (SIGSEGV), code 1, fault addr 0x0 in tid 29674 (Thread-7)
10-23 15:32:07.528 30482-30482/? A/DEBUG: *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
10-23 15:32:07.529 30482-30482/? A/DEBUG: Build fingerprint: 'HONOR/LLD-L31/HWLLD-H:8.0.0/HONORLLD-L31/144(C10):user/release-keys'
10-23 15:32:07.529 30482-30482/? A/DEBUG: Revision: '0'
10-23 15:32:07.529 30482-30482/? A/DEBUG: ABI: 'arm'
10-23 15:32:07.529 30482-30482/? A/DEBUG: pid: 29631, tid: 29674, name: Thread-7  >>> com.test.test <<<
10-23 15:32:07.529 30482-30482/? A/DEBUG: signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x0
10-23 15:32:07.529 30482-30482/? A/DEBUG: Cause: null pointer dereference
10-23 15:32:07.529 30482-30482/? A/DEBUG:     r0 dd868f00  r1 c77bfbe4  r2 c77bfbe0  r3 c77bfc98
10-23 15:32:07.529 30482-30482/? A/DEBUG:     r4 c77e4bac  r5 00000000  r6 c77bfc28  r7 c330147d
10-23 15:32:07.529 30482-30482/? A/DEBUG:     r8 c77bfe70  r9 00000000  sl b5ea9328  fp c77bfd54
10-23 15:32:07.529 30482-30482/? A/DEBUG:     ip c6d6208c  sp 00000000  lr 00000000  pc 00000000  cpsr 600f0010
10-23 15:32:07.529 30482-30482/? A/DEBUG: backtrace:
10-23 15:32:07.529 30482-30482/? A/DEBUG:     #00 pc 00000000  <unknown>


Вопрос - что это может быть? В какую сторону копать? Что посоветуете?
Может можно как-то узнать больше backtrace?
В каких случаях может быть ошибка SEGV_MAPERR, можете, пожалуйста, написать конкретные примеры?

Я вижу, что какой-то указатель null, но в другом приложении, которое использует эту библиотеку, все работает.
Значит, проблема на стороне приложения, а не c++.

Assets такие же, все функции в java-коде есть (иначе при обращении к несуществующей функции было бы JNI_Error).
Может что нет каких-то ресурсов из папки res? Хотя это не должно быть причиной.

Что думаете?
  • Вопрос задан
  • 2737 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы