gpt4 book ai didi

c - 在 C 项目中使用 C++ 代码

转载 作者:IT王子 更新时间:2023-10-29 00:21:52 25 4
gpt4 key购买 nike

我有一个客户提供了一个 C++ 代码,我迫切需要在一个用 C 编写的非常大的项目中使用它。

问题是:我无法将 C++ 代码重写为 C 语言...太容易了,我没有这段代码的 IP,客户必须维护代码。

我也无法使用 g++ 在 C 中链接我的非常大的项目:这会破坏一切!

我试图将 C++ 代码转换成一个库,导出一个 C 风格的接口(interface)(使用 extern“C”,将类封装到结构中)但是我在将这个库链接到我的项目时遇到了问题......(记住,不能使用 g++ 链接):我最终得到了对几乎所有 STL 的 undefined reference 绝望中,我将 STL 静态链接到我制作的 C/C++ 包装器库,但这并没有改变任何东西。

我不太了解 C++,但我不想为这个特定用例编写 C++ STL/C 包装器。

现在,我已经从 C++ 代码创建了一个二进制文件,并在我的 C 代码中使用 fork/exec 调用它……这是一个非常糟糕的解决方案,我想避免。

如果有人有线索/方向/提示,将不胜感激。

谢谢,纪尧姆。

最佳答案

除了 Azzy 的回答之外,这个问题的真正答案实际上是一个问题,即调用 C++ 代码需要做什么。

使用 fork 可能是个好主意,但总的来说,我认为这不是正确的解决方案,除非 C++ 代码首先需要花费大量时间来执行 [在这种情况下,fork/exec 开销是小到无所谓]。

通常,正确的解决方案是使用 C 接口(interface)(和 extern "C" 包装器 - 不要忘记使用#ifdef __cplusplus 在定义接口(interface)的 header 中,围绕 extern "C" 以便您可以在 C++ 接口(interface)实现和调用 C 中使用相同的头文件代码)。

还要注意异常。您不得调用从 C 中抛出异常的 C++ 代码——它们必须在 C++ 中处理,否则会发生坏事(究竟是哪种坏事无法确定——可能会执行随机代码,或系统崩溃,或一些随机错误输出发生等)

关于c - 在 C 项目中使用 C++ 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14021002/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com