openjdk没有可用的软件包(CommonAPI通过配置文件初始化只有dlopen)
openjdk没有可用的软件包(CommonAPI通过配置文件初始化只有dlopen)因此,不要养成思维定时,没有dlsym()就无法work了,实际上,我们可以简单的通过dlopen()配合attribute(constructor)就可以完成同样的效果
一开始陷入一个思维误区,认为只要是用这种动态插件plugin的方式来进行编程的话,那么除了dlopen()之后,接下来肯定会有dysym()的迹象,因此搜索了半天都发现不管是capicxx-core-runtime还是capicxx-someip-runtime capicxx-dbus-runtime都没有dlsym()的调用。因此进入了死胡同,觉得非常不可思议
后来经过一次偶然的发现,看到了vsomeip3中有关于__attribute__((constructor))的使用,于是我们重新查找libcommonapi的源代码发现了也有这个类型的定义
这个__attribute__((constructor))非常有意思,他表示库在被加载的时候,这里可以通过dlopen()进行加载,会自动执行相关的函数,这个宏的意思就是会执行括号里的函数
通过这个宏的链式使用就可以做到在dlopen()加载的时候,进行相关函数的调用了。
因此,不要养成思维定时,没有dlsym()就无法work了,实际上,我们可以简单的通过dlopen()配合attribute(constructor)就可以完成同样的效果