linux C++ 共享库导出类
来源:互联网 发布:怎么在手机淘宝交电费 编辑:程序博客网 时间:2024/04/30 10:31
linux C++ 共享库导出类
1.共享库的对外接口函数的声明必须加上extern “C”。
2.使用共享库对话接口函数生成的对象指针时在该对象未被释放之前不能关闭共享库句柄,否则会出现segmentation fault错误。
以下是一个插件式设计的示例:
1、主执行程序:main.cpp
#include
#include
#include "SMSGamePlugin.h"
int main(int argc, char** argv)
{
void *GameLib = dlopen("./Flower.so", RTLD_LAZY);
const char *dlError = dlerror();
if (dlError)
{
< "dlopen error!" << dlError <<
return(-1);
}
CSMSGamePlugin *(*pGetGameObject)(void);
pGetGameObject = (CSMSGamePlugin *(*)(void))dlsym(GameLib, "GetGameObject");
dlError = dlerror();
if (dlError)
{
< "dlsym error!" << dlError <<
return(-1);
}
CSMSGamePlugin *pGame = (*pGetGameObject)();
pGame->Initialize();
pGame->Load();
pGame->Handle();
delete *pGame;
dlclose(GameLib);
}
2、公用基类部分:SMSGamePlugin.h
#ifndef __SMSGamePlugin_h__
#define __SMSGamePlugin_h
class CSMSGamePlugin
{
public:
virtual int Initialize(void) = 0;
virtual int Load(void) = 0;
virtual int Handle(void) = 0;
};
#endif
编译:g++ -rdynamic -ldl -s -o Test main.cpp
3、共享库部分:
共享库头文件:Flower.h
#ifndef __Flower_h__
#define __Flower_h__
#include "SMSGamePlugin.h"
extern "C" CSMSGamePlugin *GetGameObject(void);
class CFlower: public CSMSGamePlugin
{
public:
virtual int Initialize(void);
virtual int Load(void);
virtual int Handle(void);
};
#endif
4、共享库实现文件:Flower.cpp
#include
#include "Flower.h"
CSMSGamePlugin *GetGameObject(void)
{
return(new CFlower());
}
int CFlower::Initialize(void)
{
< "Initialize()" <<
return(0);
}
int CFlower::Load(void)
{
< "Load()" <<
return(0);
}
int CFlower::Handle(void)
{
< "Handle()" <<
return(0);
}
编译:
g++ -c Flower.cpp
g++ -shared -o Flower.so
以上没有验证,需要验证之后才可以使用
- linux C++ 共享库导出类
- Linux C----创建共享库
- linux C/C++ 静态库、共享库
- linux C复习:共享库的使用
- C linux 共享内存
- linux-c: ipc_共享内存
- linux C共享内存函数
- linux C共享内存1
- linux c 共享内存编程
- 5. linux C -- 共享内存
- linux C/C++之库编译静态库、共享库
- linux C复习:静态库与共享库的区别
- linux下c的共享库和静态库
- 在Linux上用C创建共享库so
- 在Linux使用GCC编译C语言共享库
- linux C复习:程序中加载并调用共享库
- c/c++ 共享库
- 共享库C/C++
- 推送系统里使用 UPD 还是TCP做心跳包?
- Android开发系列(九):创建数据库以及完成简单的CRUD操作
- 递归算法的时间复杂度分析
- Matlab基础学习---------常用的数学函数实例学习
- 二叉树的建立(非递归建立与定义建立)与基本操作(广度和深度遍历,求叶子树高)实现
- linux C++ 共享库导出类
- 九度_题目1356:孩子们的游戏(圆圈中最后剩下的数)
- 二分插入排序
- Toast详解
- samba的下载安装和使用
- 【机房收费系统】之找不到工程或库
- Python 字典排序
- boost.multi_array学习-子视图用法(3)
- JAVA计时器