Linux C++ 动态加载共享库
来源:互联网 发布:图形布局算法 js 编辑:程序博客网 时间:2024/05/23 01:12
编译时需要 链接库 dl
dlopen()
dlopen函数打开一个函数库然后为后面的使用做准备。C语言原形是:
void * dlopen(const char *filename, int flag);
如果文件名filename是以“/”开头,也就是使用绝对路径,那么dlopne就直接使用它,而不去查找某些环境变量或者系统设置的函数库所在的目录了。否则dlopen()
就会按照下面的次序查找函数库文件:
1. 环境变量LD_LIBRARY指明的路径。
2. /etc/ld.so.cache中的函数库列表。
3. /lib目录,然后/usr/lib。不过一些很老的a.out的loader则是采用相反的次序,也就是先查/usr/lib,然后是/lib。
Dlopen()函数中,参数flag的值必须是RTLD_LAZY或者RTLD_NOW,
RTLD_LAZY的意思是resolve undefined symbols as code from the dynamic library is executed,
而RTLD_NOW的含义是resolve all undefined symbols before dlopen() returns and fail if this cannot be done'。
注意: 如果加载的动态库还依赖其他的动态库,必须使用RTLD_NOW
如果有好几个函数库,它们之间有一些依赖关系的话,例如X依赖Y,那么你就要先加载那些被依赖的函数。例如先加载Y,然后加载X。
dlopen()函数的返回值是一个句柄,然后后面的函数就通过使用这个句柄来做进一步的操作。如果打开失败dlopen()就返回一个NULL。如果一个函数库被多次打开,它会返回同样的句柄。
如果一个函数库里面有一个输出的函数名字为_init,那么_init就会在dlopen()这个函数返回前被执行。我们可以利用这个函数在我的函数库里面做一些初始化的工作。我们后面会继续讨论这个问题的。
dlopen()
dlopen函数打开一个函数库然后为后面的使用做准备。C语言原形是:
void * dlopen(const char *filename, int flag);
如果文件名filename是以“/”开头,也就是使用绝对路径,那么dlopne就直接使用它,而不去查找某些环境变量或者系统设置的函数库所在的目录了。否则dlopen()
就会按照下面的次序查找函数库文件:
1. 环境变量LD_LIBRARY指明的路径。
2. /etc/ld.so.cache中的函数库列表。
3. /lib目录,然后/usr/lib。不过一些很老的a.out的loader则是采用相反的次序,也就是先查/usr/lib,然后是/lib。
Dlopen()函数中,参数flag的值必须是RTLD_LAZY或者RTLD_NOW,
RTLD_LAZY的意思是resolve undefined symbols as code from the dynamic library is executed,
而RTLD_NOW的含义是resolve all undefined symbols before dlopen() returns and fail if this cannot be done'。
注意: 如果加载的动态库还依赖其他的动态库,必须使用RTLD_NOW
如果有好几个函数库,它们之间有一些依赖关系的话,例如X依赖Y,那么你就要先加载那些被依赖的函数。例如先加载Y,然后加载X。
dlopen()函数的返回值是一个句柄,然后后面的函数就通过使用这个句柄来做进一步的操作。如果打开失败dlopen()就返回一个NULL。如果一个函数库被多次打开,它会返回同样的句柄。
如果一个函数库里面有一个输出的函数名字为_init,那么_init就会在dlopen()这个函数返回前被执行。我们可以利用这个函数在我的函数库里面做一些初始化的工作。我们后面会继续讨论这个问题的。
- linux共享库动态加载
- Linux C++ 动态加载共享库
- linux下动态加载共享库
- linux共享库的动态加载
- windows C/C++移植linux(2) 加载动态共享库的不同
- Linux下动态共享库 连接和加载路径
- Linux下动态共享库 连接和加载路径
- Linux下动态共享库 连接和加载路径
- Linux下动态共享库 连接和加载路径
- Linux下动态共享库加载及使用详解【转】
- Linux共享库的动态加载(附测试案例)
- LINUX加载共享库
- Linux C动态加载SO库文件
- linux C复习:程序中加载并调用共享库
- 《C编译原理》共享库的动态加载和静态加载
- Unix/Linux下的动态库和静态库、动态加载共享库
- Windows与Linux平台Qt中动态库(共享库)的动态加载
- Linux 共享库加载方法
- 常用的匹配正则表达式和实例
- 深入体验Java Web开发内幕-核心基础(看张孝祥的书的笔记一)
- 关于显卡和系统的问题
- Networked Game High-level Structure
- 英文地址写法
- Linux C++ 动态加载共享库
- 一些关于sip的网址
- Java数组初始化
- udp-vs-tcp
- ds.TB_UsrDfdLkUp.RejectChanges()
- 候捷谈Java反射机制
- Top 10 time waster games
- 让FLASH背景透明-可运用于在网页内的FLASH内嵌入另一个网页
- matlab的eps