首页 » 乱七八糟 » C++调用C函数

C++调用C函数

在C++的源文件中调用了纯C语言编写的函数,虽然正确地引入了头文件,编译时也正确连接了动态链接库,但还是出现"未定义的引用xxxxxx"(undifined reference to xxx)的错误.

C++支持了函数重载,在编译时不只简单地前缀个_(或者其他的简单处理)用来当做函数的标识符,而是会对函数名进行一些处理,以使原型不同的同名函数区分开,这点与C不同.当编译cpp文件时,调用的C函数编译后产生的标识符与动态连接库中的不同,于是即使正确引入了动态链接库,也会出现"未定义的引用xxxxxx"的错误.

解决方法

1.使用extern "C"{}引入头文件,并将用到的函数重新声明一遍,例如:

extern "C"{
    #include <mysql/mysql.h>
    extern MYSQL * mysql_init( void );
}

2..c和.cpp的区别就不用多说了吧

3.一些项目原本就有C++的api,就不要多此一举了

PS: C++编译器开发商已经对<stdio.h>这类的C标准库的头文件作了extern“C”处理,所以一般可以直接在cpp中直接#include引用这些头文件.