AIX LIB_PATH
LINUX LD_LIBRARY_PATH
HP_UNIX PAHT
SCO UNIX LD_LIBRARY_PATH
动态链接库取代静态库的好处之一就是可以随时升级库的内容 。
当动态库被接口完全相同的库文件取代后,可执行程序能迅速的切换到新动态库中代码,省去了编译的麻烦 。
显式调用动态库
显式调用动态库,编译时无需库文件,执行时动态可存储于任意位置,库里共享对象必须先申请后使用,不同动态库版本,只要其共享对象接口相同,就可以直接动态加载 。注意添加 "-ldl" 编译参数 。
//打开动态库 #include<dlfcn.h> void *dlopen(const char * pathname,int mode); //获取动态库对象地址 include<dlfcn.h> void *dlsym(void *handle,const char *name); //错误检测 include<dlfcn.h> char *dlerror(vid); //关闭动态库 include<dlfcn.h> int dlclose(void * handle);
动态库的加载或多或少会占用一定的系统资源,比如内存等 。因此当不需要或者一段时间内不需要共享动态库时就要卸载之 。函数dlclose关闭参数handle所指向的动态库,卸载其所占的内存等资源,此调用后参数handle无效 。
实际上,由于动态库可能同时被多个进程共享,当一个进程指向dlclose时,资源并不马上被卸载,只有当全部进程都宣布关闭动态库后,操作系统才开始回收动态库资源 。
总结:
编译静态库时先使用-c选项,再利用ar工具产生.编译动态库的方式依不同版本的UNXI而定 。隐式调用动态库与静态库的用法相一致,而显示调用动态库则需要借助动态加载共享库函数族 。
隐式调用动态库和静态库使用方法一致,使用静态库和使用动态库编译成目标程序使用的gcc命令完全一样,那当静态库和动态库同名时,gcc命令会使用哪个库文件呢?
通过测试可以发现,当静态库和动态库同名时,gcc命令将优先使用动态库.为了确保使用的是静态库, 编译时可以加上 -static 选项,因此多第三方程序为了确保在没有相应动态库时运行正常,喜欢在编译最后应用程序时加入-static
推荐阅读
- 全方位剖析 Linux 操作系统,太全了
- Linux中/etc/passwd配置文件详解
- linux后台开发中避免僵尸进程的方法总结
- Excel从纳税人信息里面提取纳税人识别号
- 无需手机号直接注册QQ号码教程
- 红盖头下的冰岛,冰岛古树茶的产量
- 被水淹过的车还能正常使用吗 当天下暴雨,车被水淹时该怎么办?
- 没有信号的情况下可以打110吗 没有信号能拨打110吗
- 飞利浦冲牙器和松下冲牙器哪个好 松下冲牙器怎么用
- 红枣姜茶下午可以喝吗,枸杞红枣茶能天天喝吗