Отладка Android NDK: не работает armeabi-v7a

Затмение / Cygwin

NDK 8c

Создание общей библиотеки

Я не могу запустить gdbserver после перехода на armeabi-v7a. Я искал в Интернете несколько часов, но не могу найти тему, которая конкретно касается проблем отладки armeabi-v7a.

У меня нет выбора, чтобы переключиться на armeabi-v7a из-за использования сторонней библиотеки, которая зависит от этого. Без этого я получаю такие ошибки:

D:\TEMP\ccnnGAqD.s:10427: Error: selected processor does not support Thumb mode `ldrex r6,[r3]'
D:\TEMP\ccnnGAqD.s:10429: Error: selected processor does not support Thumb mode `strex r4,r5,[r3]'

До этого все работало нормально с "armeabi", используя эту настройку: http://mhandroid.wordpress.com/2011/01/23/using-eclipse-for-android-cc-development/

Единственное изменение, которое я сделал, это добавление этого в Application.mk:

APP_ABI := armeabi-v7a

В самом низу общей библиотеки Android.mk я добавил это:

$(info TARGET_ARCH     = $(TARGET_ARCH))
$(info TARGET_ARCH_ABI = $(TARGET_ARCH_ABI))
$(info TARGET_ABI      = $(TARGET_ABI))

который выводит следующее:

TARGET_ARCH     = arm
TARGET_ARCH_ABI = armeabi-v7a
TARGET_ABI      = android-14-armeabi-v7a

Я удалил приложение, используя

adb uninstall com.example.game

AndroidManifest.xml имеет свойство android:debuggable="true".

Сделал "очистить все" в Eclipse и вручную удалил папки./libs и./obj. Затем ndk-build выводит нужные папки (obj/local/armeabi-v7a и libs/armeabi-v7a), а obj / local / armeabi и libs / armeabi не существует.

Однако вот что происходит, когда я запускаю ndk-gdb:

user@MACHINENAME /cygdrive/e/projects/game
$ ndk-gdb-eclipse --force --verbose
Android NDK installation path: /cygdrive/e/projects/sdks/android-ndk
Using default adb command: /cygdrive/e/projects/sdks/android-sdk/platform-tools/adb
ADB version found: Android Debug Bridge version 1.0.31
Using ADB flags:
Using auto-detected project path: .
Found package name: com.example.game
ABIs targetted by application: armeabi
Device API Level: 15
Device CPU ABIs: armeabi-v7a armeabi
Compatible device ABI: armeabi
Using gdb setup init: ./libs/armeabi/gdb.setup
Using toolchain prefix: /cygdrive/e/projects/sdks/android-ndk/toolchains/arm-linux-androideabi-4.6/prebuilt/windows/bin/arm-linux-androideabi-
Using app out directory: ./obj/local/armeabi
Found debuggable flag: true
ERROR: Could not find gdbserver binary under ./libs/armeabi
   This usually means you modified your AndroidManifest.xml to set
   the android:debuggable flag to 'true' but did not rebuild the
   native binaries. Please call 'ndk-build' to do so,
   *then* re-install to the device!

Обратите внимание на "ABI, на которые нацелено приложение", используя неправильный "armeabi". Вот соответствующая часть ndk-gdb:

get_build_var ()
{
    if [ -z "$GNUMAKE" ] ; then
        GNUMAKE=make
    fi
    $GNUMAKE --no-print-dir -f $ANDROID_NDK_ROOT/build/core/build-local.mk -C $PROJECT DUMP_$1 | tail -1
}

APP_ABIS=`get_build_var APP_ABI`
if [ "$APP_ABIS" != "${APP_ABIS%%all*}" ] ; then
# replace first "all" with all available ABIs
  ALL_ABIS=`get_build_var NDK_ALL_ABIS`
  APP_ABIS_FRONT="${APP_ABIS%%all*}"
  APP_ABIS_BACK="${APP_ABIS#*all}"
  APP_ABIS="${APP_ABIS_FRONT}${ALL_ABIS}${APP_ABIS_BACK}"
fi
log "ABIs targetted by application: $APP_ABIS"

Я четко установил APP_ABI в armeabi-v7a в Application.mk, так что это ошибка в NDK? Или я что-то упустил?

1 ответ

Я была такая же проблема. Я настроил eclipse, следуя этой статье: http://mhandroid.wordpress.com/2011/01/23/using-eclipse-for-android-cc-development/ Затем я перехожу с armeabi на armeabi-v7a. Тогда я не смог отладить.

Я исправил эту проблему:
1) Вы должны исправить папки в "Отладочных конфигурациях"

  • Изменение основной вкладки...obj/local/armeabi/app_process на...obj/local/armeabi-v7a/app_process
  • Изменение вкладки отладчика...obj/local/armeabi/gdb2.setup на obj/local/armeabi-v7a/gdb2.setup
  • Изменение вкладки отладчика.../toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gdb для наборов инструментов /arm-linux-androideabi-4.6/prebuilt/linux-x86_64/bin/ рычажного линукс-androideabi-GDB

2) Может быть, это обходной путь, но он работает. В "Отладочные конфигурации" -> "Отладчик" -> "Общие библиотеки" добавьте /obj/local/armeabi-v7a и установите флажок "Автоматически загружать символы общей библиотеки".

Другие вопросы по тегам