混合c和c ++

use*_*003 0 c c++ gcc g++

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

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

  2. 如果包装器与库一起编译为静态库怎么办?

Jon*_*art 6

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

无论如何,既然你要调用C++代码,你的包装器将被认为是C++,需要用g ++编译.这与名称修改有关,你需要能够调用c ++库公开的那些函数.你可以看看他们readelf -s.

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

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