si = (soinfo*) dlopen("/data/app/com.xxx.xxx.sampleapp.androID-1/lib/x86/libtest.so",RTLD_GLOBAL);if (si == NulL) return;LOGI("value of dlopen [%d]",si->size);
AndroID-N中的dlopen()功能是否有任何变化?
解决方法 dlopen()不返回指向某个soinfo结构的指针,它返回voID *,标准的linux手册页对此非常具体:The function dlopen() loads the dynamic shared object (shared library) file named by the null-terminated string filename and returns an opaque “handle” for the loaded object. This handle is employed with other functions in the dlopen API,such as dlsym(3),dladdr(3),dlinfo(3),and dlclose().
因此,您可以以某种方式解释返回值的事实是非标准的,现在Google只是使用this change强制执行:
commit ae74e8750b9dae51b24a22fdb4b0e0a2d84f37b9author Dimitry Ivanov <dimitry@Google.com>...linker: hIDe the pointer to soinfoHandle no longer is a pointer to soinfo ofa corresponding library. This is done toprevent access to linker internal fIElds.BUG: http://b/25593965Change-ID: I62bff0d0e5b2dc842e6bf0babb30fcc4c000be24(cherry picked from commit d88e1f350111b3dfd71c6492321f0503cb5540db)
因此,除非您的应用程序针对的是SDK版本23或更低版本(请参阅soinfo :: to_handle()),否则您现在获得的句柄只能通过内部仿生soinfo_from_handle()转换回soinfo *.
总结以上是内存溢出为你收集整理的dlopen()不能与android-n一起使用全部内容,希望文章能够帮你解决dlopen()不能与android-n一起使用所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)