我有几个关于混合代码的问题:
基于c的完整项目,如果我想使用c ++库,那么我用纯c代码创建一个包装器,然后构建该共享库,我是否必须更改为g ++而不是gcc编译器
如果包装器编译为带库的静态库,该怎么办?
答案 0 :(得分:6)
我很想知道您使用的库只有C ++版本,而不是纯C接口。
无论如何,既然你要调用C ++代码,你的包装器将被认为是C ++,需要用g ++编译。这与name-mangling有关,您需要能够调用c ++库公开的那些函数。您可以使用readelf -s
查看它们。
然而,您的包装器公开的函数需要标记为extern "C"
,以便它们的名称不会被破坏。然后,您就可以从纯C应用程序中调用它们。
静态与共享库在这里并不重要。这只是生成正确符号的问题,因此可以进行链接。