2012-01-07 130 views
0

我有几个问题是关于混合代码:混合C和C++

  1. 基于C,如果我想用++库,然后创建一个包装围绕它用纯C代码是C完整的项目,然后建立共享库,我必须更改为g ++而不是gcc编译器吗?

  2. 如果包装器编译为库的静态库会怎么样?

+3

A C包装围绕C++?多么令人愉快的转折。 – 2012-01-07 17:55:21

+3

@LightnessRacesinOrbit:这可能会频繁发生。你可以用C++编写一个库,但希望它可以被C程序使用。 – 2012-01-07 17:56:35

+0

好读:[混合C和C++](http://www.parashift.com/c++-faq-lite/mixing-c-and-cpp.html) – 2012-01-07 17:58:18

回答

6

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

无论如何,因为您打算调用C++代码,您的包装将被视为C++,并且需要使用g ++进行编译。这与name-mangling有关,您需要能够调用C++库公开的那些函数。你可以用readelf -s来看它们。

但是,封装器公开的函数将需要标记extern "C",以便它们的名称不会被损坏。然后,您将能够从纯粹的C应用程序中调用它们。

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