【问题标题】:mixing c and c++混合 c 和 c++
【发布时间】:2012-01-07 17:52:24
【问题描述】:

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

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

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

【问题讨论】:

  • C++ 的 C 包装器?多么令人愉快的转折。
  • @LightnessRacesinOrbit:这可能经常发生。你可以用 C++ 编写一个库,但希望它可以被 C 程序使用。
  • 好读:Mixing C and C++
  • @Oli:我从不希望 C 程序可以使用任何东西 ;)
  • @LightnessRacesinOrbit: "想要" -> "需要" ...

标签: c++ c gcc g++


【解决方案1】:

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

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

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

静态库与共享库在这里应该无关紧要。这只是生成正确符号的问题,以便进行链接。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多