Android NDK находит динамическую ссылку: не удается отладить библиотеку - PullRequest
9 голосов
/ 03 апреля 2012

У меня есть проект, который прекрасно компилируется, загружается и запускается на устройстве Android. Когда я вызываю сервер GDB, он также работает нормально. Затем, когда я вызываю GDB-клиент для запуска с точками останова, появляется сообщение:

Error while mapping shared library sections:
/system/bin/linker: No such file or directory.

libandroid.so: No such file or directory.
liblog.so: No such file or directory.
libEGL.so: No such file or directory.
libOpenSLES.so: No such file or directory.
libGLESv2.so: No such file or directory.
libGLESv2_POWERVR_SGX540_120.so: No such file or directory.
...
warning: Unable to find dynamic linker breakpoint function.
GDB will be unable to debug shared library initializers
and track explicitly loaded dynamic code
warning: shared library handler failed to enable breakpoint

Это мой текущий файл Android.mk, на случай, если некоторые дополнительные настройки могут отсутствовать:

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)

LS_CPP=$(subst $(1)/,,$(wildcard $(1)/*.cpp))
APP_MODULES := callbacks
APP_PLATFORM := android-14
APP_OPTIM:= debug

LOCAL_CFLAGS    := -DRAPIDXML_NO_EXCEPTIONS
LOCAL_CFLAGS    += -g
LOCAL_CFLAGS    += -ggdb
LOCAL_CFLAGS    += -O1

LOCAL_MODULE:=app3D
LOCAL_SRC_FILES := $(call LS_CPP,$(LOCAL_PATH))
LOCAL_LDLIBS    := -landroid -llog -lEGL -lOpenSLES -lGLESv2
LOCAL_STATIC_LIBRARIES := android_native_app_glue png
LOCAL_STATIC_LIBRARIES += /jni

include $(BUILD_SHARED_LIBRARY)

$(call import-module,android/native_app_glue)
$(call import-module,libpng)

Есть ли какие-либо предположения о причинах такой странной ошибки и о том, как от нее избавиться?

Все комментарии и советы приветствуются.

1 Ответ

5 голосов
/ 29 августа 2012

Используйте ndk-gdb вместо стандартного gdb. Запустите его из корневого каталога вашего проекта. Попробуйте использовать параметр --verbose, если хотите посмотреть, что делает ndk-gdb. Вы также должны добавить эту строку в AndroidManifest.xml:

android:debuggable="true"

Например, моя выглядит так:

<application
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme"
    android:debuggable="true" >

ваш application.mk должен определить

APP_OPTIM := debug

При этом вам не нужно добавлять -g к вашим флагам компилятора, ndk-build сделает это автоматически.

...