在C语言中调用C++做的动态链接库

 更新时间:2016年05月08日 11:42:05   投稿:hebedich  
如果你有一个c++做的动态链接库.so文件,而你只有一些相关类的声明,那么你如何用c调用呢,别着急,本文通过一个小小的例子,让你能够很爽的搞定.

今天在做东西的时候遇到一个问题,就是如何在C语言中调用C++做的动态链接库so文件

如果你有一个c++做的动态链接库.so文件,而你只有一些相关类的声明, 那么你如何用c调用呢,别着急,本文通过一个小小的例子,让你能够很爽的搞定.  

链接库头文件:

head.h

class A 
{ 
    public: 
    A(); 
    virtual ~A(); 
    int gt(); 
    int pt(); 
private: 
    int s; 
}; 

firstso.cpp

#include <iostream>  
#include "head.h" 

A::A(){} 
A::~A(){} 
int A::gt() 
{ 
  s=10; 
} 
int A::pt() 
{ 
    std::cout<<s<<std::endl; 
} 

编译命令如下:

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; 
} 
} 

编译命令:

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; 
} 

编译命令如下:

gcc -rdynamic -s -o myapp test.c

运行Z$./myapp

10
$

相关文章

  • C语言数组元素的循环移位方法

    C语言数组元素的循环移位方法

    今天小编就为大家分享一篇C语言数组元素的循环移位方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-07-07
  • C语言实现简单五子棋小游戏

    C语言实现简单五子棋小游戏

    这篇文章主要为大家详细介绍了C语言实现简单五子棋小游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-08-08
  • C语言中字符串库函数的实现及模拟

    C语言中字符串库函数的实现及模拟

    C语言中有很多数据类型,比如int(整数类型)、char(字符类型)、以及浮点型的double(双精度)等。但是有一点就是我们发现这里并没有提到我们常见的有关字符串的类型。本文为大家介绍了C语言中字符串库函数的实现及模拟,需要的可以参考一下
    2022-11-11
  • C语言指针详解之野指针

    C语言指针详解之野指针

    这篇文章主要为大家介绍了C语言野指针,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2021-11-11
  • C语言实现弹跳小球

    C语言实现弹跳小球

    这篇文章主要为大家详细介绍了C语言实现弹跳小球,设置了小球分数及过关难度,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-03-03
  • 带头结点单链表与不带头结点单链表的区别

    带头结点单链表与不带头结点单链表的区别

    这篇文章主要介绍了带头结点单链表与不带头结点单链表的区别,需要的朋友可以参考下
    2023-07-07
  • 基于C++实现掷双骰游戏的示例代码

    基于C++实现掷双骰游戏的示例代码

    在最流行的博彩游戏中有一种名为“掷双骰”(craps)的骰子游戏,这种游戏在世界各地的娱乐场所和大街小巷非常受欢迎。本文将用C++语言实现这一游戏,需要的可以参考一下
    2022-03-03
  • C++单例类模板详解

    C++单例类模板详解

    这篇文章主要介绍了C++单例类模板,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-03-03
  • 从头学习C语言之switch语句和分支嵌套

    从头学习C语言之switch语句和分支嵌套

    这篇文章主要为大家详细介绍了C语言之switch语句和分支嵌套,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-01-01
  • 15种 C++ 常见报错原因分析

    15种 C++ 常见报错原因分析

    这篇文章主要介绍了15种 C++ 常见报错,本文通过实例代码给大家讲解的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-01-01

最新评论