博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Live555 中的客户端动态库.so的调用方式之一 程序中调用
阅读量:6515 次
发布时间:2019-06-24

本文共 856 字,大约阅读时间需要 2 分钟。

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不能确定指向那个函数。

转载地址:http://uoofo.baihongyu.com/

你可能感兴趣的文章
Jms学习篇二:ActiveMQ
查看>>
Spring的lazy-init详解
查看>>
factory工厂的创建
查看>>
第三章:垃圾回收器-年轻代收集器
查看>>
教你50招提升ASP.NET性能(二十):认识你的循环
查看>>
【Qt Tips】QLineEdit内容过滤之setValidator和setInputMask浅析
查看>>
个人作业1——四则运算题目生成程序(基于控制台)
查看>>
Catalyst揭秘 Day6 Physical plan解析
查看>>
嵌入式软件静态解析工具-CasePlayer2
查看>>
vc实现非标题栏窗口拖动
查看>>
[BZOJ 3622]已经没有什么好害怕的了(Dp+容斥原理)
查看>>
tar排除指定目录打包
查看>>
nodejs升级
查看>>
3.4Python数据处理篇之Numpy系列(四)---ndarray 数组的运算
查看>>
openLayers地图缩放的回调
查看>>
Java中的String类的学习
查看>>
机器学习——贝叶斯分类算法详解
查看>>
rockchip的RK3399硬解码总结
查看>>
9.修改列表(3-4,3-5)
查看>>
2018.03.28
查看>>