C++和C语言混合编译成库对外提供,第三方调用链接显示undefined refence 可能存在的原因

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没有实现)。做事情要形成系统的方法论,不要单纯毫无理由的猜测,猜测这里有问题,打一枪,猜测那里有问题,又去打一枪,何时能找到正确的路?

猜你喜欢

转载自blog.csdn.net/liqiming100/article/details/80842606