1

我正在尝试将我的 Android 应用程序(我通过 NDK 使用 libdash 库)作为本机应用程序进行调试,但我遇到了这个错误:

Error while mapping shared library sections:
`/usr/lib/jvm/java-6-openjdk-amd64/jre/lib/amd64/libjpeg.so': not in executable format: File format not recognized
warning: Could not load shared library symbols for 92 libraries, e.g. /system/bin/linker.
Use the "info sharedlibrary" command to see the complete listing.
Do you need "set solib-search-path" or "set sysroot"?
warning: Unable to find dynamic linker breakpoint function.
GDB will retry eventurally.  Meanwhile, it is likely
that GDB is unable to debug shared library initializers
or resolve pending breakpoints after dlopen().

这是我正在尝试使用的库 http://www.bitmovin.net/libdash/

4

2 回答 2

0

http://mindtherobot.com/blog/452/android-beginners-ndk-setup-step-by-step/

遵循这些指示。你需要把图书馆放在一个特别的地方。

于 2013-06-26T16:01:57.077 回答
0

您的问题似乎是您正在为 Android 进行交叉编译,但您尚未设置共享库查找路径。结果是 gdb 正在您的主机系统路径中查找共享库。

您的主机系统是您在其上运行代码构建的系统(可能是您的 PC)。您的目标系统是您要在(某些 Android 设备)上运行生成的“可执行文件”的系统。这就是为什么它被称为交叉编译。由于这两个系统不相同,您需要确保您使用的是 gdb 的交叉编译版本(一个知道您的目标和主机类型的版本),这可能是 Android SDK 提供的,您还需要确保为共享库设置搜索路径。

您应该查看通用 GDB 文档以获取详细信息,但我更喜欢设置交叉编译库路径的方法是设置 solib-absolute-path。您可以通过在 GDB 中运行以下命令来做到这一点:

(gdb) set solib-absolute-path <path to root directory all Android shared libraries are under>

这要求您在 PC 上某处的库路径方面具有与 Android 文件系统相同的目录结构。

另一种更便携的方法是设置 solib-search-path 以便它在您的 PC 上搜索 SDK 中的 Android 库位置,而不是您 PC 的默认库搜索路径,但有关详细信息,您将拥有阅读 GDB 文档,因为我不经常使用它来提供更多帮助。

于 2015-06-18T18:33:58.147 回答