今天在编译包含.c和.cpp的QT项目,在整合各种代码的时候,碰到一些问题,为了方便后查,初步总结如下:
1.新版QT中一般使用g++编译cpp文件和c文件,可以在项目中同时使用c文件和cpp文件。
后缀cpp文件g++自动识别为c++代码自动进行c++编译,后缀c文件自动识别为c代码进行c编译。这个时候必须注意在c文件中不要使用c++内容和c++的头文件
2.调用.c文件中的函数出现undefined reference to `xxxxx()'。
这是C/C++兼容问题,在C的头文件的相关函数声明添加extern "C"即可解决,例如
#ifdef __cplusplus
extern "C" {
#endif
extern int test(int, int);
#ifdef __cplusplus
}
#endif
extern "C"的主要作用是为了能够正确实现C++代码调用C语言代码
3.出现error: memory: No such file or directory #include <memory>
这是.c文件中引用c++标准的原因,可将文件后缀修改为.cpp,使用C++编译
4.出现unknown type name ‘namespace’
这是c编译c++的问题, c中没有namespace关键子,可将文件后缀修改为.cpp,使用C++编译,或者去掉该关键字
5.出现iostream no such file or directory
在.h中调用了#include <iostream> , 此头文件是cpp对应的头文件,在其他.c对应的头文件中调用了它,导致找不到的问题
修改方法1 使用stdio替代,stdio在.c和.cpp中都可以使用,方法2 .c文件改为.cpp