成功返回dlopen后,在android中找不到dlsym返回符号
我正在从一个共享库加载另一个共享库。让我们从foo1.so说起foo2.so 我正在使用dlopen,后面跟着dlsym dlopen使用正确的句柄成功,但dlsym返回“symbol not found”错误。我已使用dlerror打印错误 这些就是我尝试过的东西。在foo2.so.mk文件中,我添加了 本地\u LDFLAGS+=-Wl,--导出动态 我检查了foo2.so中的符号,使用nm,它就在那里成功返回dlopen后,在android中找不到dlsym返回符号,android,linux,Android,Linux,我正在从一个共享库加载另一个共享库。让我们从foo1.so说起foo2.so 我正在使用dlopen,后面跟着dlsym dlopen使用正确的句柄成功,但dlsym返回“symbol not found”错误。我已使用dlerror打印错误 这些就是我尝试过的东西。在foo2.so.mk文件中,我添加了 本地\u LDFLAGS+=-Wl,--导出动态 我检查了foo2.so中的符号,使用nm,它就在那里 两个模块都在C中,除了在Foo1.SO中的一个包装文件,在C++中,调用文件在C. 谁
两个模块都在C中,除了在Foo1.SO中的一个包装文件,在C++中,调用文件在C.
谁能告诉我我是否错过了什么。我正在froyo上的android emulator上运行此程序。我很想在实现级别进行探索并验证。查看/proc/PID#/maps,确保两个库都已加载 <>对象同时调用调用方和被调用方,并确保C++位没有将该名称拼错。 您是否使用了合适的RTLD_uu标志,以及dlsym是否获得了dlopen返回的有效句柄
您能否为桌面linux或cygwin构建(简化版)这两个库并测试可执行文件,以确保您想做的事情通常是可行的,即问题是特定于android的?示例代码输入在pHndl=dlopen(现在是pTemp,RTLD_)下面;如果((err=dlerror())!=NULL){LOGE(“加载共享库时出错:%s”,err);dlerror();}dlsymRet=(OMX_PTR)dlsym(pHndl,pFuncName);如果((err=dlerror())!=NULL){LOGE(“未找到错误符号:%s”,err);}它将返回有效句柄。我也试过偷懒。调用方和被调用方都驻留在C文件中,因此它会在剩余的C++文件事项中命名。关于地图文件,我需要签入媒体播放器进程。这段代码在linux上运行得非常好。尝试将openmax组件动态加载到我们的核心。需要检查媒体播放器进程的id。