赞
踩
我们提供的so库中,代码是纯 c++ 代码,里面包含了cpp 的各种特性:类、虚函数等等。但是由于客户平台原因,他们使用的是纯 C 语言,也就是代码文件的后缀也是以 “.c” 结尾的。他们需要在 C 文件中调用我们库里面的 CPP 接口,在编译的时候,编译器一直报找不到接口。
通过在我们的 CPP 代码里面加 “extern c” 的方式,错误如故;
新创建一个 CPP 文件,在该文件里面以 C 语言的风格,封装调用一次我们 CPP SO 库里面的接口(包括实例化对象等等),然后客户在他们的C文件中,调用进一步封装过后的接口,问题解决。这种解决方法,也就是网络上到处使用的包裹函数方法。
浅分析一下:C 语言里面是没有面向对象的特性,而 CPP 里面是有的。CPP 向下兼容 C 语言特性,但是 C 并不兼容 CPP 特性。
如果CPP不涉及到面向对象方面的东西(也就是类等等特性),其实就是一种类 C 语言的风格,这个时候,使用 “extern C” 和 “__cplusplus” 宏就可以完成 C 文件里面的代码可以直接调用 CPP 文件里面的代码
而如果涉及到了类、虚函数等等 CPP 特性的东西,单独靠 “extern C” 和 “__cplusplus” 宏是搞不定的。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。