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);





  • 相关阅读:
    win7下apache+mysql+php安装配置
    mysql -- 外键及数据的完整性
    mysql -- 索引的使用
    mysql 字符类型
    mysql 常用命令
    mysql 时间类型
    URI与URL
    Flask基本问题
    Session和Cookie的区别与联系
    Python flask关于新闻项目业务逻辑梳理
  • 原文地址:https://www.cnblogs.com/whuqin/p/4982003.html
Copyright © 2011-2022 走看看