集成C和C 程序

integrate a C and C++ program

本文关键字:程序 集成      更新时间:2023-10-16

我正在尝试使用图像处理来控制无人机。来自无人机的图像捕获是一个OPENCV C 程序。无人机控制程序是C程序。现在,我想集成两个程序,以便我运行一个程序,可以通过该程序获得图像并控制无人机。我怎么做?我的C程序是一个套接字程序,可将命令发送到无人机和C 程序,以从TCP套接字从无人机捕获图像流。有什么办法可以做到这一点,还是我应该将一个整个程序转换为另一种语言?任何人帮助。

问候,Shiksha

您有许多选项。最简单的可能是简单地将*.c文件命名为*.cpp-它们可以直接在C 中编译。然后,您可能会遇到一些与使用C编译器构建的外部库有关的问题。这些链接问题通常可以通过守卫每个标头包含

来解决
extern "C" {
    #include "header_for_c_library.h"
}

如果这是不可行的(例如,如果您的C项目由很多文件组成,或者您想在C中进行编译),则可能需要将C部分构建为静态库,并将其与C 链接程序。您可以朝另一个方向前进 - 将C 组件构建为静态库,并将其与C程序链接。不利的一面是,您必须为C 代码编写一个C包装器,这可能需要一些努力(或者是不可能的,具体取决于您在API中使用的C 功能)。必须注意确保包装器链接为C

在C 程序中使用C libs是重复使用该功能的常见方法。这些语言可以一起构建。通常C 代码调用C-模块API,提供所需的功能。

在这种情况下,您可以将C文件添加到C 项目中并构建一个可执行文件。

您仅应考虑C和C 中的不同链接。C功能声明应使用extern "C"标准链接规范编译。C -Libraries通常已经在标题中具有这样的代码(如果不是 - 添加):

#ifdef __cplusplus
    extern "C" { 
#endif

,在文件末尾

#ifdef __cplusplus
    }
#endif

extern" c"防止C 编译器更改功能名称。当C 支持过载时,C 编译器将有关功能参数的信息添加到函数名称中,即称为Mangling。这不应针对C-Library代码进行。