zoukankan      html  css  js  c++  java
  • 动态链接库的使用

    动态链接库(.so)可以让程序在运行时被加载,当so修改时,使用程序不需要重新编译就可以使用。本文介绍几个函数,讲述so的加载和方法调用。

    void * dlopen( const char * pathname, int mode);

    以指定模式打开某动态链接库文件,返回句柄。

    模式有:RTLD_LAZY, RTLD_NOW; RTLD_GLOBAL, RTLD_LOACAL;RTLD_NODELETE, RTLD_NOLOAD,RTLD_DEEPBIND

    void* dlsym(void* handle, const char* symbol)

    handle是由dlopen打开动态库返回的指针,symbol是要获取的函数或全局变量的名称,返回值是指向函数的地址,供后续调用。


    int dlclose(void* handle)

    关闭动态库,handle是dlopen返回的句柄。只有当次动态库的使用计数为0时,才会真正被系统卸载。


    实例:

    被调用的代码

    A* GetA()
    {
        return new A;
    }
    
    class A 
    {
        public:
            void say()
            {   
                cout << "hello" << endl;
            }   
    }


    编译成A.so,主程序调用

    //函数指针
    A* (*pGetA)();
    void* handle = dlopen("A.so", RTLD_LAZY);
    pGetA = (A* (*)())dlsym(handle, "GetA");
    
    A* a = (*pGetA)();
    a->say();
    
    dlclose(handle);





  • 相关阅读:
    html表单提交的几种方法
    ORACLE-SQLLOAD导入外部数据详解
    js 技巧1
    js 细节
    问题链接
    abstract 抽象类
    修饰符 public、 private 和 protected和区别
    HTML5新特性之Mutation Observer
    img 标签上的src 链接图片不存在时 怎么处理
    npm 用 淘宝代理
  • 原文地址:https://www.cnblogs.com/whuqin/p/4982003.html
Copyright © 2011-2022 走看看