gpt4 book ai didi

c++ - 如何将独立的 c 应用程序组合成 c++ 应用程序?

转载 作者:行者123 更新时间:2023-12-02 10:21:39 25 4
gpt4 key购买 nike

我正在开发一个 C++ 应用程序(称为 recorder.cpp ),其中包括来自其他地方的一些 C++ 库(必须使用 c++14,所以我被困在这方面)。目前我的应用程序正在运行,但它只是基于外部库和命令行参数进行配置。

有一个单独的 C 应用程序(称为 receiver.c )独立工作,我基本上想与 recorder 结合使用.我认为最简单的方法是复制并粘贴所有 receiver进入 recorder ,但这似乎有点多余(更不用说如果我将来对 receiver 进行修改,我将需要在 recorder 中进行相同的更改)。所以我想知道是否有办法链接它们,以便我可以调用receiver。来自 recorder应用程序。我知道我不能只调用 receiver的 main(),但我不确定是否有办法构建 receiver所以它更像是一个库,但仍然可以构建为它的独立应用程序。

最佳答案

“......我试图弄清楚是否有办法将它们链接起来,以便我可以从录音机应用程序调用接收器。”

是的 - 但更简单、更直接的方法是复制 reciever.c代码(减去它的 main() 函数)与 C++ 代码。这将要求 C 中没有语法。违反 C++ 的代码规则。 (例如,转换 malloc() 的返回值在 C++ 中是必需的,但在 C 中不推荐使用。)但是因为大多数 C 语法完全是 C++兼容,应该有很少或没有必要的修改。现在你所有的代码都在一起了,可以简单地编译为C++ .

然而,链接方法需要编译您的独立程序的所有函数(同样,将 main() 函数省略到库中。例如 DLL 或共享库。可以使用 extern "C" { ... } within the C++ 头文件链接该库文件以包围 C 函数原型(prototype),这些原型(prototype)在 C 库文件中定义。包围中的函数将使用 C 链接而不是 C++ 进行编译。一个简单的例子:

    // C++ code
extern "C" void f(int); // one way
extern "C" { // another way
int g(double);
double h();
};
void code(int i, double d)
{
f(i);
int ii = g(d);
double dd = h();
// ...
}

Reproduced from here...

请注意,链接中包含以下语句:“...此外,您需要阅读本节的其余部分以了解如何使您的 C 函数可被 C++ 调用和/或您的 C++ 函数可被 C 调用。”

编辑从评论中添加信息:
关于创建库。然后,两个程序都可以使用该库,而不是在两个地方进行维护。这将使版本控制复杂化,并且如果两个程序在 future 出现分歧,则可能会出现 future 问题。另请注意,也可以使用静态库而不是共享库。随着 future 变化的发生,这些方法具有不同的版本控制含义。 (来自@Avi Berger)

...或者,如果您的意图是拥有一个通用的 *.c 文件,以便为一个应用程序所做的更改很容易地包含在另一个应用程序中,那么您无需创建库,而只需在 .o 文件中进行链接。 (来自@Goswin von Brederlow)

关于c++ - 如何将独立的 c 应用程序组合成 c++ 应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59880104/

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