混合c和c ++

时间:2012-01-07 17:52:24

标签: c++ c gcc g++

我有几个关于混合代码的问题:

  1. 基于c的完整项目,如果我想使用c ++库,那么我用纯c代码创建一个包装器,然后构建该共享库,我是否必须更改为g ++而不是gcc编译器

  2. 如果包装器编译为带库的静态库,该怎么办?

1 个答案:

答案 0 :(得分:6)

我很想知道您使用的库只有C ++版本,而不是纯C接口。

无论如何,既然你要调用C ++代码,你的包装器将被认为是C ++,需要用g ++编译。这与name-mangling有关,您需要能够调用c ++库公开的那些函数。您可以使用readelf -s查看它们。

然而,您的包装器公开的函数需要标记为extern "C",以便它们的名称不会被破坏。然后,您就可以从纯C应用程序中调用它们。

静态与共享库在这里并不重要。这只是生成正确符号的问题,因此可以进行链接。