1、#ifdef __cplusplus
extern "C"
{
#endif
////这里是要对外提供的接口
#ifdef __cplusplus
}
#endif
2、用nm命令查看提供的动态库的内容:
nm test.so | grep "all_init"
如果返回t,那么说明你的CMakeLists.txt里面可能存在-fvisibility=hidden,导致函数对外不可见。详情请见https://stackoverflow.com/questions/37531846/nm-symbol-output-t-vs-t-in-a-shared-so-library。
总结:
凡是undefined reference to这样类似的错误可以用nm去查看,这个函数是否真的实现了(T实现了并且对外可见,t实现了对外不可见,U没有实现)。做事情要形成系统的方法论,不要单纯毫无理由的猜测,猜测这里有问题,打一枪,猜测那里有问题,又去打一枪,何时能找到正确的路?