混合C和C++
问题描述:
我有几个问题是关于混合代码:混合C和C++
基于C,如果我想用++库,然后创建一个包装围绕它用纯C代码是C完整的项目,然后建立共享库,我必须更改为g ++而不是gcc编译器吗?
如果包装器编译为库的静态库会怎么样?
答
我很想知道你使用的库只有C++版本,而不是纯粹的C接口。
无论如何,因为您打算调用C++代码,您的包装将被视为C++,并且需要使用g ++进行编译。这与name-mangling有关,您需要能够调用C++库公开的那些函数。你可以用readelf -s
来看它们。
但是,封装器公开的函数将需要标记extern "C"
,以便它们的名称不会被损坏。然后,您将能够从纯粹的C应用程序中调用它们。
静态与共享库在这里并不重要。这只是生成正确符号的问题,以便链接可以发生。
A C包装围绕C++?多么令人愉快的转折。 – 2012-01-07 17:55:21
@LightnessRacesinOrbit:这可能会频繁发生。你可以用C++编写一个库,但希望它可以被C程序使用。 – 2012-01-07 17:56:35
好读:[混合C和C++](http://www.parashift.com/c++-faq-lite/mixing-c-and-cpp.html) – 2012-01-07 17:58:18