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
分享到:
相关推荐
资源分类:Python库 所属语言:Python 资源全名:nux-0.1.0-py3-none-any.whl 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
gx http共享程序,×nux/cygwin下与别人共享文件,主页在github
### NUX-07中文说明书安全使用指南及关键知识点 #### 安全警告与注意事项 在使用NUX-07之前,请仔细阅读本手册中的所有安全提示和操作指南。为确保用户安全并避免设备损坏,以下列出了重要的安全须知: 1. **防止...
这个目录下包含了电商小程序的完整源代码和配置文件。通常,一个小程序项目包括以下组成部分: 1. **pages**:这是存放小程序各个页面的目录,每个页面都有对应的JS、JSON、WXML和WXSS文件。JS文件负责处理业务逻辑...
总的来说,WebkitGTK 2.4.9-3是为CentOS 7提供的一种用于在GTK+环境中渲染Web内容的库,特别适用于需要在Kettle数据集成工具中使用Web视图的场景。通过安装这个RPM包,用户能够利用WebkitGTK的功能,增强Kettle在...
。嵌入式Li1.。nux笔试题库和答案分解.pdf
nux-dextop-release rpm包,本人在centos7.2在安装部署kettle7.1时解决no libwebkitgtk-1.0 detected时用到
NUX Desktop是一个针对CentOS/RHEL的第三方软件仓库,主要提供图形界面相关的软件,如多媒体应用、游戏等。nux-dextop-release RPM包类似于epel-release,它包含了NUX Desktop仓库的GPG密钥和配置信息,确保安全地...
ETL工具Kettle研究-2-Kettle安装部署,Centos 6 需要下载另外的nux-dextop rpm安装包,否则执行yum install webkitgtk会出错。
Nux是一个开源的Java工具,它能够让XML高效处理变得容易。Nux可嵌入到具有高吞吐量的XML消息中间件中比如:大型p2p底层结构,消息队 列,发布-订阅和Blogs/新闻聚合的matchmaking系统,分布式系统,防火墙等.Nux集成并...
电吉他效果器小天使nux mfx-10使用说明书
标题“nux5 oracle10G RAC workstation7”指的是在一个Nux5(可能是Linux发行版的误写,可能是指Red Hat Enterprise Linux 5或类似的系统)操作系统上安装Oracle 10G Real Application Clusters (RAC)的教程,使用的...
。。介绍Li11nux操作系统下的USB硬件设备驱动.docx
。。介绍Li11nux操作系统下的USB硬件设备驱动.pdf
mtd-utils-1.5.0-2.el6.nux.i686.rpm安装包,需要的可以下载安装,mtd-utils工具
虚拟机VMware Deepin1nux-
STM8S系列是STMicroelectronics(意法半导体)推出的一款8位微控制器,它具有高效能、低功耗的特点,...在"Auto Wakeup Unit (AWU)"压缩包中可能包含相关的示例代码、库文件或文档,可以帮助开发者更好地利用这个功能。
~$nux学习系列十四:使用gdb和gdbserver构建在线调试环境.docx
- **安装交叉编译工具**:解压交叉编译工具包并放置在指定目录下,然后配置环境变量使其生效。 - **获取本机运行版本的uic工具**:为了编译Qt/Embedded,需要Qt/X11的uic编译器。可以从Qt/Embedded源码包中编译出...