问题
liba.so包含函数符号abc,libb.so里面又调用了函数abc。程序运行的时候如果普通dlopen会报错,libb.so无法找到符号abc。
解决
dlopen的时候参数加入RTLD_GLOBAL即可。下面是man中的解释,就是针对这种问题。一个动态库需要的符号在另一个动态库中定义,非常不提倡!但有时候动态库不是你做的,你没有办法去修改,也只能这么去做保证程序的运行。
RTLD_GLOBAL
The symbols defined by this shared object will be made available for symbol resolution of subsequently
loaded shared objects.