C++调用C链接库
C++调用C语言的链接库,其实相对C调用C++简单。因为C++本来就向下兼容C吧(个人见解)。
但由于编译器的设计不同,会出现一些问题,如下:(如中间部分,有一句undefined reference to 'helloC()' ,helloC()是我在C链接库中的函数)
简单说来原因就是未经处理的C代码编译后函数名可能变为_helloC()之类的,而C++编译后函数名却不是这样,所以就对不上。
详细解释见http://www.cnblogs.com/kenkofox/archive/2009/11/05/1597053.html
需要在include C的文件的时候加上extern "c"
在练习中,写了三个文件:c.h c.c cpp.cpp 前两个编译为C链接库,cpp.cpp使用C。验证了C++可以访问到C的全局变量。
c.h:
#include "stdio.h"
void helloC();
int abc = 1;
void helloC();
int abc = 1;
c.c:
#include <stdio.h>
#include "c.h"
void helloC(){
printf("I am Kenko");
}
#include "c.h"
void helloC(){
printf("I am Kenko");
}
cpp.cpp:(重点在于如何include)
#include <iostream>
using namespace std;
extern "C" {
#include "c.h"
}
int main(){
helloC();
cout<<abc<<endl;
return 0;
}
using namespace std;
extern "C" {
#include "c.h"
}
int main(){
helloC();
cout<<abc<<endl;
return 0;
}
至于编译:
1.链接库:gcc -shared -o libccall.so c.c
2.编译cpp.cpp:g++ cpp.cpp ./libccall.so