zoukankan      html  css  js  c++  java
  • Live555 中的客户端动态库.so的调用方式之一 程序中调用

    1.  打开动态链接库:
        #include <dlfcn.h>
        void *dlopen(const char *filename, int flag);
        该函数返回操作句柄,如:
        void *pHandle = dlopen(strSoFilePath, RTLD_LAZY);

    2.  取动态对象地址:
        #include <dlfcn.h>
        void *dlsym(void *pHandle, char *symbol);
        dlsym根据动态链接库操作句柄(pHandle)与符号(symbol),返回符号对应的地址。
        使用这个函数不但可以获取函数地址,也可以获取变量地址。比如,假设在so中
        定义了一个void mytest()函数,那在使用so时先声明一个函数指针:
        void (*pMytest)(),然后使用dlsym函数将函数指针pMytest指向mytest函数,
        pMytest = (void (*)())dlsym(pHandle, "mytest");

    3.  关闭动态链接库:
        #include <dlfcn.h>
        int dlclose(void *handle);
        该函数将该.so的引用计数减一,当引用计数为0时,将它从系统中卸载。

    4.  动态库错误函数:
        #include <dlfcn.h>
        const char *dlerror(void);
        当动态链接库操作函数执行失败时,dlerror可以返回出错信息,返回值为NULL时
        表示没有错误信息。

        在取到函数执行地址后,就可以在动态库的使用程序里根据动态库提供的函数接口
        调用动态库里的函数。
        在编写调用动态库的程序的Makefile文件时,需要加入编译选项-ldl。

        从void *dlsym(void *handle, char *symbol); 的参数可以看出,该函数只传两个
        参数:一个指向so的handle和一个函数的symbol,所以so里面的函数应该不允许重载,
        否则根据一个 symbol不能确定指向那个函数。

  • 相关阅读:
    ar游戏开发入门三步走
    什么是 OpenCL OpenGL
    https 服务器搭建
    javascript 访问cookie信息
    手机网页制作需要注意的一点东西
    asp.net下载文件几种方式
    javascriptM
    PDF转JPG
    java实现PDF转HTML
    关于mysql ERROR 1045 (28000)错误的解决办法
  • 原文地址:https://www.cnblogs.com/pengkunfan/p/3916756.html
Copyright © 2011-2022 走看看