调用so提示symbol lookup error: undefined symbol
问题是这样:
我编译生成了一个so,这个库的里面有一个token类,token类的A函数调用了调用了B算法。我的代码里面包含对应B算法的头文件和CPP,编译生成so.B算法是存粹C实现的,因此
B算法的头文件里面也采用#ifdef __cplusplus
extern "C" {
#endif
这种方式定义。
结果测试程序调用到A算法的时候,就提示symbol lookup error: undefined symbol....
而且比较奇怪的是,我的测试程序如果采用隐式调用的方式,就没有问题。
比如这样:
p = CreateInstance(0);--实例化token类
p->A函数,
而如果采用显式调用的方式,比如通过
dlopen(so的路径, RTLD_LAZY | RTLD_GLOBAL);
dlsym也执行成功。
如果是调用so库中没有调用B算法的函数,就没有问题。(这些函数都在一个cpp里面定义,没有用到B算法的CPP)
如果调用了使用B算法的A函数(A函数和B算法分别在两个CPP中),就会提示symbol lookup error: undefined symbol