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





  • 相关阅读:
    shell数组(产生不同的随机数)
    统计服务连接状况
    子网掩码与子网划分
    oracle 12g sqlplus安装
    MySQL的备份和还原
    mysql日志
    mysql用户和权限管理
    mysql show
    CentOS Linux解决Device eth0 does not seem to be present
    mysqldump命令详解(转载)
  • 原文地址:https://www.cnblogs.com/whuqin/p/4982003.html
Copyright © 2011-2022 走看看