需求描述:
用C++写一些API,内部实现是用C++做的,但对外暴露的API是纯C的。
方法简单描述:
1)定义API的头文件,不要#include任何C++相关的东西,比如#include <string>
2)定义API的头文件,以
#ifdef __cplusplus
extern "C" {
#endif
开始,以
#ifdef __cplusplus
}
#endif
结束
3)实现部分的.cpp文件,以
#ifdef __cplusplus
extern "C" {
#endif
开始,以
#ifdef __cplusplus
}
#endif
结束
4)实现部分的.cpp文件中,#include任何C++相关的东西,要放在定义extern "C"之前
可能有这种情况发生:
用上面的方法做一个库,另一个纯C的程序调用它,用g++编译能通过,用gcc编译不能通过,提示C++相关的实现没有找到,比如std::string。
参考:
总结:移植(porting),解决undefined reference to错误及unresovled错误
未完待续……