第三天:
1. 库文件的概念和使用
1.1 库文件的概念和作用
1.2 库文件的分类
1)静态库
2)动态库(共享库)
2. 静态库的概念和特性
2.1 静态库的概念
2.2 静态库的特性
2.3. 静态库的生成
2.4.静态库的调用方法和步骤
3. 动态库的基本概念和特性
3.1 动态库的概念
3.2 动态库的特性
3.3 动态库的生成
3.4 动态库的调用
4. 编译器默认优先选择动态库,强制使用静态库的方法是使用-static选项
5. 动态库的动态加载
#include <dlfcn.h>
Link with -ldl
(1)dlopen函数
void *dlopen(const char *filename, intflag);
第一个参数:字符串形式的共享库文件名
第二个参数:具体的操作标志,加载方式
RTLD_LAZY - 延迟加载
RTLD_NOW - 立即加载
返回值:成功返回一个句柄(地址)信息,失败返回NULL;
函数功能:主要用于将参数filename指定的共享库文件加载到内存中;
(2)dlsym函数
void *dlsym(void *handle, const char *symbol);
第一个参数:具体的句柄信息,也就是dlopen函数的返回值
第二个参数:字符串形式的符号名,这里指函数名
返回值:成功返回函数的地址,失败返回NULL;
函数功能: 主要用于查找handle指向共享库中名字为symbol的函数在内存中的地址信息;
(3)dlclose函数
int dlclose(void *handle);
函数功能:主要用于关闭/卸载参数指定的共享库,参数为dlopen函数的返回值,成功返回0,失败返回非0;
(4)dlerror函数
char *dlerror(void);
函数功能:主要用于获取调用dlopen()/dlsym()/dlclose()函数之后产生的错误信息并返回,如果上述函数没有产生错误,则返回NULL;