Linux支持共享库已经有悠久的历史了,不再是什么新概念了。大家都知道如何编译、连接以及动态加载(dlopen/dlsym/dlclose) 共享库。但是,可能很多人,甚至包括一些高手,对共享库相关的一些环境变量认识模糊。当然,不知道这些环境变量,也可以用共享库,但是,若知道它们,可能就会用得更好。下面介绍一些常用的环境变量,希望对家有所帮助:

LD_LIBRARY_PATH 这个环境变量是大家最为熟悉的,它告诉loader:在哪些目录中可以找到共享库。可以设置多个搜索目录,这些目录之间用冒号分隔开。在linux下,还提供了另外一种方式来完成同样的功能,你可以把这些目录加到/etc/ld.so.conf中,或则在/etc/ld.so.conf.d里创建一个文件,把目录加到这个文件里。当然,这是系统范围内全局有效的,而环境变量只对当前shell有效。按照惯例,除非你用上述方式指明,loader是不会在当前目录下去找共享库的,正如shell不会在当前目前找可执行文件一样。

LD_PRELOAD 这个环境变量对于程序员来说,也是特别有用的。它告诉loader:在解析函数地址时,优先使用LD_PRELOAD里指定的共享库中的函数。这为调试提供了方便,比如,对于C/C++程序来说,内存错误最难解决了。常见的做法就是重载malloc系列函数,但那样做要求重新编译程序,比较麻烦。使用LD_PRELOAD机制,就不用重新编译了,把包装函数库编译成共享库,并在LD_PRELOAD加入该共享库的名称,这些包装函数就会自动被调用了。在linux下,还提供了另外一种方式来完成同样的功能,你可以把要优先加载的共享库的文件名写在/etc/ld.so.preload里。当然,这是系统范围内全局有效的,而环境变量只对当前shell有效。

LD_ DEBUG 这个环境变量比较好玩,有时使用它,可以帮助你查找出一些共享库的疑难杂症(比如同名函数引起的问题)。同时,利用它,你也可以学到一些共享库加载过程的知识。它的参数如下:
libs display library search paths
reloc display relocation processing
files display progress for input file
symbols display symbol table processing
bindings display information about symbol binding
versions display version dependencies
all all previous options combined
statistics display relocation statistics
unused determined unused DSOs
help display this help message and exit
BIND_NOW 这个环境变量与dlopen中的flag的意义是一致,只是dlopen中的flag适用于显示加载的情况,而BIND_NOW/BIND_NOT适用于隐式加载。

LD_PROFILE/LD_PROFILE_OUTPUT:为指定的共享库产生profile数据,LD_PROFILE指定共享库的名称,LD_PROFILE_OUTPUT指定输出profile文件的位置,是一个目录,且必须存在,默认的目录为/var/tmp/或/var/profile。通过profile数据,你可以得到一些该共享库中函数的使用统计信息。

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u1/42Array6Array/showart_388842.html

nux下共享库(SO)有关的几个环境变量 zz相关推荐

  1. Linux下共享库的查找顺序

    http://www.cnblogs.com/lovevivi/archive/2013/01/15/2861211.html 在接手一个很古老的程序时,发现其所使用的动态库都实在是太陈旧了,正式运行 ...

  2. linux 下共享库创建及使用

    1.创建共享库 [xpan@localhost 2.5.3]$ ls libhello.c  libhello.h  usehello.c [xpan@localhost 2.5.3]$ gcc -f ...

  3. linux下共享库的制作及常见的问题

    将自己写的链表生成共享库  1.编译  2.设置库名:    库的名称格式:lib + XXX + 版本号.so (库的名称为XXX) -shared 生成共享文件库 -fpic 动态链接    3. ...

  4. 【Flutter】Flutter 开发环境搭建 ( Android Studio 下 Flutter / Dart 插件安装 | Flutter SDK 安装 | 环境变量配置 | 开发环境检查 )

    文章目录 一.Flutter 学习资料 二.Flutter 开发环境搭建 三.Android Studio 环境安装 Flutter / Dart 插件 四.下载 Flutter SDK 五.设置 F ...

  5. windows下安装composer方法(不修改PATH环境变量)

    转载地址:http://www.th7.cn/Program/php/201410/297829.shtml composer是一个新崛起的PHP的依赖管理工具.官方安装方法见: https://ge ...

  6. linux配置redis服务,记一次linux下安装redis, 设置redis服务, 及添加环境变量

    一. redis的安装 cd /opt                                                                                # ...

  7. Mac系统下Jmeter的下载、安装、及环境变量配置

    一.Jmeter是什么? Jmeter是Apache组织开发的基于java的压力测试工具. 二.Jmeter主要是用来做什么的? 1.能够对HTTP和FTP服务器进行压力和性能测试, 也可以对任何数据 ...

  8. Linux - Linux下Java安装路径查找;配置Java环境变量

    一.查看Java的安装路径 1.已经安装好了JDK,也配置了环境变量 1.执行 java -version java -version 出现了版本号,表示安装过了JDK,配置了环境变量 2.在配置过j ...

  9. Java面试题库,Java下载安装教程环境变量

    02 JVM 线程 JVM内存区域 JVM运行时内存 垃圾回收与算法 JAVA四种引用类型 GC分代收集算法 VS 分区收集算法 GC垃圾收集器 JAVA IO/NIO JVM类加载器 03 JAVA ...

最新文章

  1. python3.6进度条_Python实现下载界面(带进度条,断点续传,多线程多任务下载等)...
  2. tcp假连接_总结的23 个 TCP高频面试问题
  3. linux下程序如何实现单实例运行
  4. 【渝粤教育】广东开放大学 文化田野调查 形成性考核 (22)
  5. 微信红包问题:找出某个出现次数超过红包总数一半的红包的金额(面试题)
  6. MySQL: 1006 - Can't create database '***' (errno: 13) 错误 解决方法
  7. html自动播放auto,为移动而生的 HTML 属性autocapitalize和autocorrect
  8. 看过曹县国际车展,我闯入了魔幻的塞伯坦
  9. 简单的php文件_简单的php文件上传(实例)
  10. java怎样实现数据库 选择列属性的select查询??_除了不要 SELECT * ,使用数据库还应知道的11个技巧!...
  11. xcode6以后, 使用.pch
  12. 2008流媒体服务器点播搭建详解
  13. matlab的比较器模块,simulink中比较器
  14. 2022注册测绘师备考开始 还在不知所措?手把手教你怎么考?
  15. 常见概率分布的无记忆性分析
  16. [UIView numberofRowsInSection]unrecognized selector sent to instance 0x1808bef0 错误
  17. 海康威视官方安装包(提供64位安装包)
  18. 卷积神经网络demo
  19. 计算几何(判断顺时针/逆时针) - Clockwise or Counterclockwise - HDU 6857
  20. iOS 支付宝好友分享

热门文章

  1. 关于gym新版本0.23.0版本的一些问题以及Box2D的安装
  2. 计算机科学与技术等12专业毕业生有望落户北京
  3. 防干烧定时省心 康巴赫304不锈钢蒸锅评测
  4. 微信小程序按钮失效的几大原因
  5. Erwin sql脚本反向建模,中英文映射model
  6. 怪物史莱克3带来的启示
  7. js 将时间戳转为中国标准时间 时间戳转日期
  8. vue鼠标点击指定区域创建dom元素与编辑删除元素的思路
  9. thinkphp下的图片上传
  10. centOS安装mysql 使用解压包的方式