从C程序调用C ++函数

时间:2018-11-28 09:37:26

标签: c++ c makefile linker legacy

我正在努力将用C ++编写的功能添加到用C编写的大型程序中。

我曾尝试将C程序中包含的所有代码都用外部“ C”块包围,但是当我使用g ++进行编译时,我仍然遇到编译器试图将C编译为C ++的错误。我已将extern“ C”块添加到所有标题和.c文件中,如下所示:

#ifdef __cplusplus
extern "C"
{
#endif

//C code here

#ifdef __cplusplus
}
#endif

错误看起来像这样:

  

./ sortcodes / oci.c:在功能‘int GetSpecList(ClientData,   Tcl_Interp *,int,Tcl_Obj * const *)’:../ sortcodes / oci.c:188:25:错误:   “ init”未命名类型            static init = TRUE;

如果我删除C ++函数调用并仅使用gcc编译C程序,则不会发生这些错误。

如果我删除外部的“ C”块并使用选项进行编译

  

gcc -std = c ++ 0x -lstdc ++ -std = c ++ 11

我遇到类似下面的错误,其中C ++标志显然被忽略了

  

./ Event_Reader.cpp:9:20:致命错误:iostream:没有这样的文件或目录    #include

我是否有任何遗漏或误解的选项?任何建议将不胜感激。

1 个答案:

答案 0 :(得分:2)

首先,要编译c ++代码,您必须使用g ++或clang ++之类的c ++编译器。然后,您需要使用extern "C"链接声明所需的c ++函数。此时,您可以从C代码中调用该函数。 有关具体示例,请参见How do I call a C++ function from C