C++调用C链接库 拂晓风起

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;

  c.c:

#include <stdio.h>
#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;
}

  至于编译:

  1.链接库:gcc -shared -o libccall.so c.c

  2.编译cpp.cpp:g++ cpp.cpp ./libccall.so

  

  

kenkofox@qq.com https://github.com/kenkozheng 欢迎投简历给我,一线大厂工作机会
原文地址:https://www.cnblogs.com/kenkofox/p/1597052.html