标准C调用C++动态链接库
来源:互联网 发布:mac如何删除桌面文件 编辑:程序博客网 时间:2024/05/22 01:09
由于C++为了设现重载的问题,编译后后生成的函数名与C有一定的区别,所以C++生成的动态库不能用C提供的dlopen来直接进行调用,需要进行如下处理:
例:
/*sample.h*/
class sample
{
public:
int method();
private:
}
假如上动态库提供了一个头文件和一个相应的库.so,我们在C中不能直接用ldsym去找这个函数的,因为c++编译方式与C不同,这时需要写一个中间文件,例mylib.c
#include "sample.h"
exter "C"
{
int myfunction()
{
sample ss;
ss.method();
}
}
生成中间文件mylib.so
标准C的写法
#include <stdio.h>
#include <dlfcn.h>
main()
{
int (*dlfunc)();
void *handle;
handle = dlopen("./mylib.so", RTLD_LAZY);
...
dlfunc = dlsym(handle, "myfunction");
...
dlfunc();
dlclose(handle);
return;
}
大家把引用C++动态中函数想要做的东西可以全部放到myfunc中去做,然后在C中调用一次就可以了,如果只是测试,就没必要这要写了,把动态库当成静态连接也可以。
{
public:
int method();
private:
}
假如上动态库提供了一个头文件和一个相应的库.so,我们在C中不能直接用ldsym去找这个函数的,因为c++编译方式与C不同,这时需要写一个中间文件,例mylib.c
#include "sample.h"
exter "C"
{
int myfunction()
{
sample ss;
ss.method();
}
}
生成中间文件mylib.so
标准C的写法
#include <stdio.h>
#include <dlfcn.h>
main()
{
int (*dlfunc)();
void *handle;
handle = dlopen("./mylib.so", RTLD_LAZY);
...
dlfunc = dlsym(handle, "myfunction");
...
dlfunc();
dlclose(handle);
return;
}
大家把引用C++动态中函数想要做的东西可以全部放到myfunc中去做,然后在C中调用一次就可以了,如果只是测试,就没必要这要写了,把动态库当成静态连接也可以。
- 标准C调用C++动态链接库
- C-Sharp调用标准动态库
- C-Sharp调用标准动态库
- C-Sharp调用标准动态库
- Java调用c/c++动态链接库
- C#调用C/C++动态链接库
- Python调用C/C++动态链接库
- Python调用C/C++动态链接库
- C调用GO的动态链接库
- JNA调用C语言动态链接库
- 【c#】C#调用matlab动态链接库
- erlang调用c\c++动态链接库
- Python调用C语言之如何调用动态链接库
- c动态链接库
- 在C#中调用C语言标准动态库方法
- C调用C++动态库以及静态链接库
- ctypes: 使用python调用C编写的动态链接库
- C/C++中动态链接库的创建和调用
- PCB设计,单片机开发,制样代生产
- 运行时改变私有的只读字段,静态字段值
- 自己做的一个炸碉堡的小游戏(SWING)
- 100句经典构建你良好的人际关系
- fdisk查看,创建分区, mkfs创建文件系统
- 标准C调用C++动态链接库
- Linux目录结构及解释
- (岱山鹿栏晴沙)海岛露营大会精彩回顾
- SS7/C7浅谈
- 从3.X版本开始ExtJs将按照使用人头数对商业开发进行收费
- GDB查看变量
- 一个EXTJS与JSP连接把数据写入数据库的例子
- 实例讲解木马的分析方法
- 什么是COM组件