1. 接口说明
- dlopen()是C/C++中用来加载so库
- dlsym()是查询对应函数地址,返回函数指针
- dlclose()关闭so库的加载
2. 问题
在Android中通过JNI调用dlopen()或dlsym()时,有时打印dlerror()会出现:“undefined symbol: JNI_OnLoad”
其实我们的dlopen()或者dlsym()并没有发生错误,是Android系统自己的某些dlopen使用导致报了错。然后没有地方用dlerror()清空,导致我们使用时报错。
3. 解决方案
- 使用dlopen()或dlsym()返回值判断,忽略该错误
- 调用dlopen()或dlsym()前先调用一次dlerror()清空