Android中JNI编程:C和C++混编问题

5 阅读1分钟

某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

参考资料:

www.cnblogs.com/slz-coder15… segmentfault.com/a/119000004…