博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++类的动态加载
阅读量:5942 次
发布时间:2019-06-19

本文共 1493 字,大约阅读时间需要 4 分钟。

利用继承关系,定义抽象类,只有纯虚函数构成的接口,然后具体的模块实现放在子类中。

通过extern "C" 解决C++名字修饰问题。得到子类指针。

然后所有函数的名字就遵循了统一约定。

涉及三个c相关的文件和一个makefile

 

main.cpp 为主程序负责调用so中的类的方法

Module.h 为模块通用接口

module1.cpp 为具体的某个模块的具体实现

Makefile描述编译

 

main.cpp

#include 
#include
#include
#include "Module.h"#include
using namespace std;int main(int argc,char *argv[]){ Module *mp; Module *mp1; void *dp; typedef Module* (*fun)(void); fun pp; dp=dlopen("/mnt/c/Users/reed/Desktop/cppdll/libmodule1.so",RTLD_LAZY); if (dp==NULL) { fprintf(stderr,"Error: so load error\n"); fprintf(stderr," %s\n",dlerror()); exit(0); } pp=(fun)dlsym(dp,"generate"); if (pp==NULL) { fprintf(stderr,"Error: symbol error\n"); fprintf(stderr," %s\n",dlerror()); exit(0); } mp=pp(); mp1=pp(); mp->run(); mp1->run();}

Module.h

#include 
class Module{public: virtual void run()=0;};

module1.cpp

#include 
#include
#include "Module.h"class module1: public Module{public: void run() { printf("I am module1\n"); }};extern "C" { Module *generate() { return new module1(); }};

Makefile

all:main somain:main.cpp so    g++ $< -o $@ -O2 -rdynamic  -ldlso:module1.cpp    g++ $< -shared -Wl,-soname,libmodule1.so -o libmodule1.so -O2 -fPIC

 

转载于:https://www.cnblogs.com/reedlau/p/5983094.html

你可能感兴趣的文章
chgrp命令
查看>>
Java集合框架GS Collections具体解释
查看>>
洛谷 P2486 BZOJ 2243 [SDOI2011]染色
查看>>
linux 笔记本的温度提示
查看>>
数值积分中的辛普森方法及其误差估计
查看>>
Web service (一) 原理和项目开发实战
查看>>
跑带宽度多少合适_跑步机选购跑带要多宽,你的身体早就告诉你了
查看>>
广平县北方计算机第一届PS设计大赛
查看>>
深入理解Java的接口和抽象类
查看>>
java与xml
查看>>
Javascript异步数据的同步处理方法
查看>>
iis6 zencart1.39 伪静态规则
查看>>
SQL Server代理(3/12):代理警报和操作员
查看>>
基于事件驱动的DDD领域驱动设计框架分享(附源代码)
查看>>
Linux备份ifcfg-eth0文件导致的网络故障问题
查看>>
2018年尾总结——稳中成长
查看>>
JFreeChart开发_用JFreeChart增强JSP报表的用户体验
查看>>
度量时间差
查看>>
通过jsp请求Servlet来操作HBASE
查看>>
crontab执行shell脚本日志中出现乱码
查看>>