基于android系统
1.c访问so
dlopen 用于打开so
dlsym 根据函数名称查找函数地址
2. jni
System.loadLibrary加载so,最终也是dlsym查找JNI_ONLOAD
so中重写JNI_ONLOAD,将java方法和native方法绑定,后续调用java方法后最终到native
3.HAL
其实就是将dlopen 和 dlsym 封装使用
在libhardware/hardware.c中可以看到先用dlopen打开so
然后dlsym 查找 HAL_MODULE_INFO_SYM_AS_STR,一般驱动开发都会声明结构体标识HAL_MODULE_INFO_SYM,该结构体继承hw_module_t