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

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

helloworld_cpp.h文件

1#include<iostream> 2using namespace std; 3 4class CHello 5{ 6private: 7 8public: 9 CHello(); 10 ~CHello(); 11 12 void Print_HelloWorld(); 13};

helloworld_cpp.cpp文件

1#include "helloworld_cpp.h" 2 3void CHello::Print_HelloWorld() 4{ 5 cout << "Hello World!" << endl; 6} 7 8CHello::CHello() 9{ 10} 11 12CHello::~CHello() 13{ 14}

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

helloworld_interface.h文件,该文件提供给C语言使用,使得C语言能够调用C++的接口。需要调用该接口的代码,就需要包含此文件,例如下面的mian.c文件就包含了该文件。

1#ifndef HELLOWORLD_INTERFACE_H 2#define HELLOWORLD_INTERFACE_H 3 4#ifdef __cplusplus 5extern "C"{ 6#endif 7 8void Print_HelloWorld(); 9 10#ifdef __cplusplus 11} 12#endif 13 14#endif //HELLOWORLD_INTERFACE_H

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

1#include "helloworld_interface.h" 2#include "helloworld_cpp.h" 3 4static CHello g_interface; 5 6void Print_HelloWorld() 7{ 8 g_interface.Print_HelloWorld(); 9}

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

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

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

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

1#include "helloworld_interface.h" 2 3int main() 4{ 5 6 Print_HelloWorld(); 7 8 return 0; 9}

编译main.c文件,命令如下:

gcc main.c -o main -L. -lhelloworld_cpp

./main执行main,输出如下所示:

本文同步分享在 博客“zy010101”(CSDN)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

Opencv中Mat矩阵相乘——点乘、dot、mul运算详解

Opencv中Mat矩阵相乘——点乘、dot、mul运算详解2016年09月02日00:00:36 \牧野(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fme.csdn.net%2Fdcrmg) 阅读数:59593

C# Aspose.Cells导出xlsx格式Excel,打开文件报“Excel 已完成文件级验证和修复。此工作簿的某些部分可能已被修复或丢弃”

报错信息:最近打开下载的Excel,会报如下错误。(xls格式不受影响)!(https://oscimg.oschina.net/oscnet/2b6f0c8d7f97368d095d9f0c96bcb36d410.png)!(https://oscimg.oschina.net/oscnet/fe1a8000d00cec3c

Linux查看GPU信息和使用情况

1、Linux查看显卡信息:lspci|grepivga2、使用nvidiaGPU可以:lspci|grepinvidia!(https://oscimg.oschina.net/oscnet/36e7c7382fa9fe49068e7e5f8825bc67a17.png)前边的序号"00:0f.0"是显卡的代