映射共享库时出错

Error while mapping shared library

本文关键字:出错 共享 映射      更新时间:2023-10-16

我正试图将我的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/

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

按照以下指示进行操作。你需要把图书馆放在一个特别的地方。

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

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

您应该查看通用GDB文档以了解详细信息,但我更喜欢设置交叉编译库路径的方法是设置solib绝对路径。您可以通过在GDB中运行以下程序来做到这一点:

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

这需要你有与你的Android文件系统相同的目录结构,关于你电脑上某个地方的库路径。

另一种更便携的方法是设置solib搜索路径,这样它将在你的电脑上搜索SDK中的Android库位置,而不是你电脑的默认库搜索路径,但要了解详细信息,你必须阅读GDB文档,因为我不经常使用它来提供更多帮助。