Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/211.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
成功返回dlopen后,在android中找不到dlsym返回符号_Android_Linux - Fatal编程技术网

成功返回dlopen后,在android中找不到dlsym返回符号

成功返回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. 谁

我正在从一个共享库加载另一个共享库。让我们从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.


谁能告诉我我是否错过了什么。我正在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。