是否可以将.c和.cpp(来自openCV)编译并链接在一起?
问题描述:
我目前正在尝试制作一个程序,该程序使用openCV从网络摄像头拍摄图片,并执行图形操作以在openCV中找到一个区域,然后将其传递给一个.c程序,该程序通过端口将信息发送到服务器节目。是否可以将.c和.cpp(来自openCV)编译并链接在一起?
我的问题是,即使我创建了一个h文件为我在OpenCV中的.cpp代码中使用,并在我的.C包括它的功能,还是有一个错误,说error: expected ‘)’ before ‘&’ token
这里是我的simpleIS。 h:
int captureimg();
int backgroundsub();
void noisesuppression(Mat &ptr);
void simplegetarea(Mat &img);
extern int area1,area2,area3,area4;
有什么想法吗?
答
您将不得不将自己需要的功能封装到其他C++函数中,并使这些函数具有外部“C”连接。你也将不得不拥有C数据结构来保存创建C++类所需的东西。从C
调用包装函数例如,如果你有一段cpp的功能是这样的:
int im_a_cxx_function(int , some_type, another_type &);
你让一个包装函数:
extern "C" int im_a_cxx_wrapper_function(int i,
struct some_C_type *st_C,
struct another_C_type *at_C)
{
some_type st;
another_type at;
set_some_type(&st, st_C);
set_another_type(&at, at_C);
return im_a_cxx_function(i, st, at);
}
然后,在你的包装头功能:
#ifdef __cplusplus
extern "C" {
#endif
int im_a_cxx_wrapper_function(int i, struct some_C_type *st_C,
struct another_C_type *at_C);
#ifdef __cplusplus
}
#endif
然后,在您的.c文件中包含封装函数的标头,然后调用包装函数正常。主要原因在于,如果由于名称变形而无法从C中调用一个没有外部“C”的函数,并且由于您无法控制库函数,因此必须将它们包装起来。你也可以持有不透明的指向C++类型的指针,但由于你不能使用构造函数,所以你通常必须至少为它们写入工厂和删除函数。
C中没有引用。使用指针或值代替。 –
另外不要忘记,已编译的C/C++函数/变量解析为不同的符号名称。参见'extern“C”'获得更多信息 – valdo
它比其他方式更易于编译c代码作为C++ – rerun