如何用c语言调用c++做成的动态链接库

今天在做东西的时候遇到一个问题,就是如何在C语言中调用C++做的动态链接库so文件如果你有一个c++做的动态链接库.so文件,而你只有一些相关类的声明,那么你如何用c调用呢,别着急,本文通过一个小小

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

今天在做东西的时候遇到一个问题,就是如何在C语言中调用C++做的动态链接库so文件
如果你有一个c++做的动态链接库.so文件,而你只有一些相关类的声明, 那么你如何用c调用呢,别着急,本文通过一个小小的例子,让你能够很爽的搞定.   
链接库头文件:
head.h

class A  
{  
        public:  
        A();  
        virtual ~A();  
        int gt();  
        int pt();  
private:  
        int s;  
};  
// 何问起 hovertree.com

firstso.cpp

#include <iostream>   
#include "head.h"  
  
  
A::A(){}  
A::~A(){}  
int A::gt()  
{  
    s=10;  
}  
int A::pt()  
{  
        std::cout<<s<<std::endl;  
}  
// 何问起 hovertree.com

编译命令如下:
g++ -shared -o libmy.so firstso.cpp
这时候生成libmy.so文件,将其拷贝到系统库里面:/usr/lib/
进行二次封装:

secso.cpp

#include <iostream>  
#include "head.h"  
extern "C"  
{  
int f();  
int f()  
{  
A a;  
a.gt();  
a.pt();  
return 0;  
}  
}  
// 何问起 hovertree.com

编译命令:
gcc -shared -o sec.so secso.cpp -L. -lmy
这时候生成第二个.so文件,此时库从一个类变成了一个c的接口.
拷贝到/usr/lib
下面开始调用:
test.c

#include "stdio.h"  
#include "dlfcn.h"  
  
  
#define SOFILE "sec.so"  
int (*f)();  
int main()  
{  
void *dp;  
dp=dlopen(SOFILE,RTLD_LAZY);  
f=dlsym(dp,"f");  
f();  
return 0;  
}  
// 何问起 hovertree.com

编译命令如下:
gcc -rdynamic -s -o myapp test.c

 

运行Z$./myapp

10
$

 

http://www.cnblogs.com/roucheng/p/3456005.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/120555.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • ac测评题库_用标号法求网络最大流

    ac测评题库_用标号法求网络最大流给定一个包含 n 个点 m 条边的有向图,并给定每条边的容量,边的容量非负。图中可能存在重边和自环。求从点 S 到点 T 的最大流。输入格式第一行包含四个整数 n,m,S,T。接下来 m 行,每行三个整数 u,v,c,表示从点 u 到点 v 存在一条有向边,容量为 c。点的编号从 1 到 n。输出格式输出点 S 到点 T 的最大流。如果从点 S 无法到达点 T 则输出 0。数据范围2≤n≤10000,1≤m≤100000,0≤c≤10000,S≠T输入样例:7 14 1 71

    2022年8月9日
    6
  • 微型计算机硬件系统的性能主要取决6,微机计算机硬件系统的性能主要取决于…

    微型计算机硬件系统的性能主要取决6,微机计算机硬件系统的性能主要取决于…大家好,我是时间财富网智能客服时间君,上述问题将由我为大家进行解答。微机计算机硬件系统的性能主要取决于微处理器。微处理器能完成取指令、执行指令,以及与外界存储器和逻辑部件交换信息等操作,是微型计算机的运算控制部分。微处理器由一片或少数几片大规模集成电路组成的中央处理器。这些电路执行控制部件和算术逻辑部件的功能。微处理器与传统的中央处理器相比,具有体积小、重量轻和容易模块化等优点。微处理器的基本组成…

    2022年6月28日
    27
  • docker-compose 集群_dockercompose作用

    docker-compose 集群_dockercompose作用前言实际工作中我们部署一个应用,一般不仅仅只有一个容器,可能会涉及到多个,比如用到数据库,中间件MQ,web前端和后端服务,等多个容器。我们如果一个个去启动应用,当项目非常多时,就很难记住了,所有

    2022年7月30日
    9
  • java h2 数据库_Java H2数据库

    java h2 数据库_Java H2数据库介绍H2是Java编写的一款内嵌式数据库,支持内存和文件两种方式存储数据。SpringBoot整合pom.xmlorg.springframework.bootspring-boot-starter-data-jpacom.h2databaseh2runtimeapplication.ymlspring:datasource:#url:jdbc:h2:mem:testdburl:jdbc:h…

    2022年10月12日
    2
  • HDU 4920 Matrix multiplication(矩阵相乘)

    HDU 4920 Matrix multiplication(矩阵相乘)

    2022年2月7日
    40
  • esp32显示屏_1602a液晶屏显示不了

    esp32显示屏_1602a液晶屏显示不了文章记录了本硬件小白尝试使用ESP32芯片点亮1602A屏幕

    2022年9月22日
    1

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号