如何用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)
上一篇 2021年12月23日 下午7:00
下一篇 2021年12月23日 下午8:00


相关推荐

  • java 入门面试题

    java 入门面试题起因焦虑。每次自己想跳槽的时候,内心总是担忧着那些面试题怎么解答。 很多问题在实际工作中并不会遇到,没有实际的解决问题经验,看过也记不住。 假如我明年需要换工作,那现在把下次的面试准备工作,拆分、融入到平时的每天中,会不会取得更满意的offer?目标收集网上各种经典的java面试题 做出答案,分享出去,和猿友讨论,不断进步 扩大知识图谱,扎实基础,梳理知识脉络…

    2022年5月27日
    38
  • OpenAI Agent Kit vs n8n:AI智能体构建平台的终极对比与选择指南

    OpenAI Agent Kit vs n8n:AI智能体构建平台的终极对比与选择指南

    2026年3月13日
    2
  • idea2022.01.21激活码(注册激活)2022.02.15[通俗易懂]

    (idea2022.01.21激活码)2021最新分享一个能用的的激活码出来,希望能帮到需要激活的朋友。目前这个是能用的,但是用的人多了之后也会失效,会不定时更新的,大家持续关注此网站~https://javaforall.net/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~9A…

    2022年4月1日
    50
  • Mysql开启远程连接方法

    Mysql开启远程连接方法

    2021年9月19日
    50
  • python实现AES加密解密

    python实现AES加密解密1 前言 AES 是一种对称加密 所谓对称加密就是加密与解密使用的秘钥是一个 之前写过一片关于 pythonAES 加密解密的文章 但是这里面细节实在很多 这次我从参数类型 加密模式 编码模式 补全模式 等等方面系统的说明如何使用 AES 加密解密 看文章不能急功近利 为了解决一个问题临时查到一个代码套用进去 或许可以迅速解决问题 但是遇到新的问题还需要再次查询 这种我认为还是比较浪费时间的 我相信看完认真看完这篇文章的你会大有收获 2 环境安装 shellpipunin

    2026年3月18日
    2
  • 5分钟学会!把代码从本地推送到 GitHub,就是这么简单

    5分钟学会!把代码从本地推送到 GitHub,就是这么简单

    2026年3月14日
    2

发表回复

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

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