前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C++调用C链接库

C++调用C链接库

作者头像
用户1258909
发布2018-07-03 10:40:22
9770
发布2018-07-03 10:40:22
举报
文章被收录于专栏:拂晓风起拂晓风起

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:

代码语言:javascript
复制
#include "stdio.h"
void helloC();
int abc = 1;

  c.c:

代码语言:javascript
复制
#include <stdio.h>
#include "c.h"
void helloC(){
printf("I am Kenko");
}

  cpp.cpp:(重点在于如何include)

代码语言:javascript
复制
#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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2009-11-05 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档