我正在尝试调试我的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/
答案 0 :(得分:0)
http://mindtherobot.com/blog/452/android-beginners-ndk-setup-step-by-step/
按照以下说明操作。你需要把图书馆放在特别的地方。
答案 1 :(得分:0)
您的问题似乎是您正在为Android进行交叉编译,但您尚未设置共享库查找路径。结果是gdb正在寻找您的主机系统路径,以便找到共享库。
您的主机系统是您运行代码构建的系统(可能是您的PC)。您的目标系统是您将运行生成的"可执行文件的系统。 on(某些Android设备)。这就是它被称为交叉编译的原因。由于这两个系统不相同,因此您需要确保使用交叉编译的gdb版本(知道您的目标和主机类型的版本),这可能是随Android SDK提供的,以及您还需要确保设置共享库的搜索路径。
您应该查看常规GDB文档以获取详细信息,但我更喜欢设置交叉编译库路径的方法是设置solib-absolute-path。您可以通过在GDB中运行以下命令来实现:
(gdb) set solib-absolute-path <path to root directory all Android shared libraries are under>
这要求您拥有与Android文件系统相同的目录结构,以及PC上某处的库路径。
另一种更便携的方法是设置solib-search-path,以便在PC上的SDK中搜索Android库位置而不是PC的默认库搜索路径,但是有关您必须阅读GDB文档的详细信息,因为我不经常使用它来帮助更多。