某Android项目,涉及JNI开发,需要在C++代码中,调用一个C编写的so库中的函数。代码编译成功,实际运行的时候却出现undefined reference to xxx报错。(由于公司代码安全方面的要求,这里就不放具体代码了)
反复检查代码和编译配置,没发现问题。为什么会找不到这个函数呢?后面突然想到是不是涉及到C和C++混编时的兼容问题,查了下资料,果然是这个原因。
简单的说,就是C++编译后库中函数名会变得很长,与C生成的不一致,造成C++不能直接调用C函数。
解决措施: 在include头文件上增加:
#ifdef __cplusplus
extern "C" {
#endif
#include "XXX.h"
#ifdef __cplusplus
}
#endif
参考资料: