链接C++;使用gcc实现C中的静态库 下面的代码中,我试图调用C++中的一个哑函数(使用C++函数头文件,比如ApFixFix.h,ApIt.h)。当我用g++编译时,代码运行良好。但是,当我使用GCC编译测试C时,它会引发一个错误,因为我已经包含了一个C++的头文件,它是一个有效的错误。

链接C++;使用gcc实现C中的静态库 下面的代码中,我试图调用C++中的一个哑函数(使用C++函数头文件,比如ApFixFix.h,ApIt.h)。当我用g++编译时,代码运行良好。但是,当我使用GCC编译测试C时,它会引发一个错误,因为我已经包含了一个C++的头文件,它是一个有效的错误。,c++,c,gcc,g++,C++,C,Gcc,G++,使用gcc编译有什么变通方法吗?我从一些帖子中读到,以这种方式合并C/C++代码不是一种好的做法。请告诉我,如果有任何严重的重复使用大型C代码库和做类似的事情 谢谢 头文件:testcplusplus.h #include "ap_fixed.h" #include "ap_int.h" #ifdef __cplusplus extern "C" { #endif void print_cplusplus(); #ifdef __cplusplus } #endif testcplusp

使用gcc编译有什么变通方法吗?我从一些帖子中读到,以这种方式合并C/C++代码不是一种好的做法。请告诉我,如果有任何严重的重复使用大型C代码库和做类似的事情

谢谢

头文件:testcplusplus.h

#include "ap_fixed.h"
#include "ap_int.h"

#ifdef __cplusplus
extern "C" {
#endif

void print_cplusplus();

#ifdef __cplusplus
}
#endif
testcplusplus.cc

#include <iostream>
#include "testcplusplus.h"

void print_cplusplus() {

ap_ufixed<10, 5,AP_RND_INF,AP_SAT > Var1 = 22.96875; 
std::cout << Var1 << std::endl;
}
错误:

In file included from ap_fixed.h:21:0,
                 from testcplusplus.h:1,
                 from test.c:2:
ap_int.h:21:2: error: #error C++ is required to include this header file

此时不需要包括ap_int.h和ap_fixed.h,因为
print\u cplusplus
函数的声明不需要这些定义


<>比较,在TestCPLUS中添加C,所以C编译器只能看到C++代码的C兼容接口。

< P>问题是C++头APPUnth.h包含在C程序测试C中(间接通过TestCPLUS PLUS .H)。 解决方案是删除标题“ap_fixed.h”的include 和testcplusplus.h中的“ap_int.h”,并直接从testcplusplus.cpp中包含它们。C程序不需要知道这些,无论如何,只有C++包装器直接使用它们。

在一个更大的例子中,将TestCPLUS PLUS .h分成两个标题:一个只包含对C环境的外部接口声明,另一个包含C++实现中内部需要的其余声明,以及任何必需的包含。 <>你一旦完成了这个操作,你仍然会面临链接错误,因为所产生的可执行文件将包含对C++运行库的符号的引用,以及C++代码使用的任何其他库。要解决此问题,请在编译最终可执行文件时添加-l指令,例如:

gcc -o test test.c -L. -ltest -lstdc++

你可以用“代码> > Gcc-X C++ + <代码>指定输入语言,而不与你的直接问题有关,但是你应该在<代码> TestCPLUS中添加< <代码> TestCPLUS PLUS .H/COD>(代码应该有扩展名<代码> CC <代码>或<代码> .CPP < /C> >,以确保它被确认为C++文件)另外,如果在可执行文件中有任何C++,则<代码>主< /代码>应该是C++。(虽然我不知道现代的实现是否仍然需要这样做。)你仍然需要链接C++运行时,至少,当然。我用了你的建议,先生,但是仍然有一些错误。我必须使用-LSTDC + +选项以及GCC来成功编译Test.CK,这是另一个方面:可执行文件需要链接到标准的C++ LIBS,否则您将获得未定义的引用。我将把这一点补充到答案中。
In file included from ap_fixed.h:21:0,
                 from testcplusplus.h:1,
                 from test.c:2:
ap_int.h:21:2: error: #error C++ is required to include this header file
gcc -o test test.c -L. -ltest -lstdc++