相关文章推荐
没人理的帽子  ·  飞行训练中心合格审定规则·  1 年前    · 
低调的镜子  ·  院党组第十六巡视组巡视新疆天文台工作动员会召 ...·  1 年前    · 
迷茫的烈马  ·  丝路花雨抖音团购_79版丝路花雨_丝路花雨评 ...·  2 年前    · 
大力的手链  ·  应该在什么时候服用肌酸? | Creapure·  3 年前    · 
豪爽的冰淇淋  ·  能够自发产生二次传播的病毒营销只有四种| ...·  3 年前    · 
小百科  ›  C语言调用C++动态链接库-腾讯云开发者社区-腾讯云
安静的自行车
2 年前
作者头像
zy010101
0 篇文章

C语言调用C++动态链接库

前往专栏
腾讯云
开发者社区
文档 意见反馈 控制台
首页
学习
活动
专区
工具
TVP
文章/答案/技术大牛
发布
首页
学习
活动
专区
工具
TVP
返回腾讯云官网
社区首页 > 专栏 > 程序员 > C语言调用C++动态链接库

C语言调用C++动态链接库

作者头像
zy010101
发布 于 2020-11-04 14:26:01
2.2K 0
发布 于 2020-11-04 14:26:01
举报

C调用C++接口,这个问题的解决和 C++调用C动态链接库 是类似的。话不多说,直接上例子来进行说明。

helloworld_cpp.h文件

#include<iostream>
using namespace std;
class CHello
private:
public:
    CHello();
    ~CHello();
    void Print_HelloWorld();
};

helloworld_cpp.cpp文件

#include "helloworld_cpp.h"
void CHello::Print_HelloWorld()
    cout << "Hello World!" << endl;
CHello::CHello()
CHello::~CHello()
}

到这里,我们实际实现的内容都以及全部完成了。现在我们需要做一些改变以使得C能够调用到C++接口。下面我们再写个接口文件。

helloworld_interface.h文件,该文件提供给C语言使用,使得C语言能够调用C++的接口。下面的mian.c文件将include这个文件,当然也只会包含这个文件。

#ifndef HELLOWORLD_INTERFACE_H
#define HELLOWORLD_INTERFACE_H
#ifdef __cplusplus
extern "C"{
#endif
void Print_HelloWorld();
#ifdef __cplusplus
#endif
#endif //HELLOWORLD_INTERFACE_H

helloworld_interface.cpp文件,这个文件将C++的接口变成了C语言可以调用的接口。在这个文件中需要包含helloworld_cpp.h文件,因为它需要使用CHello这个类。但是不能在helloworld_interface.h文件包含,因为C语言需要包含helloworld_interface.h文件,否则会导致编译不过去。

#include "helloworld_interface.h"
#include "helloworld_cpp.h"
static CHello g_interface;
void Print_HelloWorld()
    g_interface.Print_HelloWorld();
}

至此,我们的C++文件就写完了,将其编译为动态链接库。使用的命令如下:

g++ -shared -fPIC helloworld_cpp.cpp helloworld_interface.cpp -o libhelloworld_cpp.so

编译之后,生成名为libhelloworld_cpp.so的动态链接库。将其拷贝一份到/usr/lib目录之下。

我们编译main.c文件来调用C++接口,其内容如下。

#include "helloworld_interface.h"
int main()
 
推荐文章
没人理的帽子  ·  飞行训练中心合格审定规则
1 年前
低调的镜子  ·  院党组第十六巡视组巡视新疆天文台工作动员会召开----中国科学院 ...
1 年前
迷茫的烈马  ·  丝路花雨抖音团购_79版丝路花雨_丝路花雨评价-抖音
2 年前
大力的手链  ·  应该在什么时候服用肌酸? | Creapure
3 年前
豪爽的冰淇淋  ·  能够自发产生二次传播的病毒营销只有四种| 人人都是产品经理
3 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
小百科 - 百科知识指南
© 2024 ~ 沪ICP备11025650号