栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Linux上的C ++动态共享库

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Linux上的C ++动态共享库

myclass.h

#ifndef __MYCLASS_H__#define __MYCLASS_H__class MyClass{public:  MyClass();    virtual void DoSomething();private:  int x;};#endif

myclass.cc

#include "myclass.h"#include <iostream>using namespace std;extern "C" MyClass* create_object(){  return new MyClass;}extern "C" void destroy_object( MyClass* object ){  delete object;}MyClass::MyClass(){  x = 20;}void MyClass::DoSomething(){  cout<<x<<endl;}

class_user.cc

#include <dlfcn.h>#include <iostream>#include "myclass.h"using namespace std;int main(int argc, char **argv){    void* handle = dlopen("myclass.so", RTLD_LAZY);  MyClass* (*create)();  void (*destroy)(MyClass*);  create = (MyClass* (*)())dlsym(handle, "create_object");  destroy = (void (*)(MyClass*))dlsym(handle, "destroy_object");  MyClass* myClass = (MyClass*)create();  myClass->DoSomething();  destroy( myClass );}

在Mac OS X上,使用以下命令进行编译:

g++ -dynamiclib -flat_namespace myclass.cc -o myclass.sog++ class_user.cc -o class_user

在Linux上,使用以下命令进行编译:

g++ -fPIC -shared myclass.cc -o myclass.sog++ class_user.cc -ldl -o class_user

如果这是针对插件系统的,则可以将MyClass用作基类,并定义所有所需的虚拟函数。然后,插件作者将从MyClass派生,重写虚拟函数并实现

create_object
destroy_object
。您的主应用程序无需进行任何更改。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/395531.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号