使用C程序中的C ++共享对象?

时间:2011-11-15 05:32:52

标签: c++ c

我目前正在开发一个C程序,具体取决于具有C接口的第三方库(头文件是用C语言编写的)。我通过链接所有必需的.so文件编译我的程序,一切都很好。但是,我最近看了一下这个第三方库的源代码。显然,它是用C ++编写的,它确实利用了一些C ++特性(名称空间,OOP等)。

这甚至可能吗?所以我可以用C ++编写一个库,提供一个C接口,生成.so文件来隐藏C ++实现,然后我的库可以在一个C程序中使用?它会引起问题吗?

谢谢!

1 个答案:

答案 0 :(得分:4)

是。
该库是用C ++编写的,但它提供了一个使用C链接的接口,以便链接到您的c程序 这基本上是可行的,因为C ++标准专门提供了为C ++程序指定链接规范的规定。

例如:

extern "C" 
{    
    void doSomething(char);    
} 

extern "C"这里是链接规范,它使C ++中的函数doSomething()具有'C'链接(编译器不做C ++样式 1 {{3 }} )这可确保您的C代码可以链接到它 由于C ++函数定义已经编译并转换为二进制格式,因此客户端应用程序/库“C”链接器只使用“C”名称链接到此代码。

1 C和C ++名称管理差异的一个例子:
C ++支持函数重载而C不支持,因此C ++编译器需要通过添加有关函数参数参数的信息来破坏名称。 AC编译器不需要使用函数参数来破坏名称,因为没有函数重载支持。当您使用extern“C”链接链接规范时,C ++编译器不会将函数参数信息添加到用于链接的名称。