ldconfig及 LD_LIBRARY_PATH

1. 往/lib和/usr/lib里面加东西,是不用修改/etc/ld.so.conf的,但是完了之后要调一下ldconfig,不然这个library会找不到

2.想往上面两个目录以外加东西的时候,一定要修改/etc/ld.so.conf,然后再调用ldconfig,不然也会找不到比如安装了一个mysql到/usr/local/mysql,mysql有一大堆library在/usr/local/mysql/lib下面,这时就需要在/etc/ld.so.conf下面加一行/usr/local/mysql/lib,保存过后ldconfig一下,新的library才能在程序运行时被找到。

3.如果想在这两个目录以外放lib,但是又不想在/etc/ld.so.conf中加东西(或者是没有权限加东西)。那也可以,就是export一个全局变量LD_LIBRARY_PATH,然后运行程序的时候就会去这个目录中找library。一般来讲这只是一种临时的解决方案,在没有权限或临时需要的时候使用。

4. ldconfig做的这些东西都与运行程序时有关,跟编译时一点关系都没有。编译的时候还是该加-L就得加,不要混淆了。

5. 总之,就是不管做了什么关于library的变动后,最好都ldconfig一下,不然会出现一些意想不到的结果。不会花太多的时间,但是会省很多的事。

几个特殊的环境变量: LD_DEBUG的用法:

[root@ljj c_c++]# LD_DEBUG=help ls Valid options for the LD_DEBUGenvironment variable are: libs display library search paths relocdisplay relocation processing files display progress for input filesymbols display symbol table processing bindings display informationabout symbol binding versions display version dependencies all allprevious options combined statistics display relocation statisticsunused determined unused DSOs help display this help message and exitTo direct the debugging output into a file instead of standard output afilename can be specified using the LD_DEBUG_OUTPUT environmentvariable.

[root@ljj c_c++]#

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 relocationprocessing files display progress for input file symbols display symboltable processing bindings display information about symbol bindingversions display version dependencies all all previous options combinedstatistics display relocation statistics unused determined unused DSOshelp 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数据,你可以得到一些该共享库中函数的使用统计信息。

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/hahapro/archive/2008/04/01/2237654.aspx

ldconfig及 LD_LIBRARY_PATH相关推荐

  1. ldconfig及LD_LIBRARY_PATH

    ldconfig是一个动态链接库管理命令,为了让动态链接库为系统所共享,还需运行动态链接库的管理命令:ldconfig.ldconfig 命令的用途,主要是在默认搜寻目录 (/lib和/usr/lib ...

  2. kfaka storm写入mysql_flume+kafka+storm+mysql架构设计

    序言 前段时间学习了storm,最近刚开blog,就把这些资料放上来供大家参考.这个框架用的组件基本都是最新稳定版本,flume-ng1.4+kafka0.8+storm0.9+mysql如果有需要测 ...

  3. Twitter Storm安装配置(Ubuntu系统)单机版

    要使用storm首先要安装以下工具:JDK.Python.zookeeper.zeromq.jzmq.storm (注:各个模块都是独立的,如果安装失败或者卡顿可以单独百度某个模块的安装,都是可以的. ...

  4. CentOS7 搭建Janus服务

    参考这位大佬的文章https://blog.csdn.net/jia2719/article/details/87345724 同时结合部署过程中遇到的一些问题,总结出下面的部署流程,用到的CentO ...

  5. pear php5.6,一键安装php5.6.40脚本

    #!/bin/bash #安装依赖软件 yum -y install libxml2-devel curl-devel libjpeg libjpeg-devel libpng libpng-deve ...

  6. witter Storm 安装实战

    实际上安装Twitter Storm是上周三的事情了,周三的时候安装了一个单机版的,用WordCount跑了一下,感觉还不错.周四试着在集群上安装,碰到了一些问题,一直折腾到周五,留了个尾巴(没有做测 ...

  7. Ubuntu16.04 安装UHD GNU Radio教程

    安装分三步: 安装Ubuntu16.04系统,务必从官网下载系统. 推荐使用安装工具:Universal USB Installer. 首先安装UHD 安装GNURadio 安装UHD 注意:由于许多 ...

  8. 动态库(.so)的制作

    扩展:   linux gcc命令 描述: a. 动态库也叫共享库 b. 动态库把对一些库函数的链接载入推迟到程序运行的时期(runtime). c. 可以实现进程之间的资源共享. d. 将一些程序升 ...

  9. DM8数据库的DBLINK功能(OCI方式及ODBC方式)

    背景:在对DM8数据库做测试的过程中,需要验证异构数据库的DBLINK功能(ORACLE到DM8). 遇到的问题: 1.文档资料较少,网上有一些示例,实际操作过程中会有问题,信息不完善,需要整合. 2 ...

最新文章

  1. android模糊查询listview数据_ListView的简单应用(一)
  2. Hibernate4多对多关系映射
  3. MySQL中any、some、all关键字
  4. 图像添加Beta分布噪声
  5. jQuery hover()
  6. 3dmax物体轴心点坐标和unity3d不一样_Unity3D新手必看:几个让你相见恨晚的小技巧...
  7. 2019牛客多校第四场 I题 后缀自动机_后缀数组_求两个串de公共子串的种类数
  8. android 底部导航菜单_司机共创会前方拥堵!导航路线功能该怎么优化?
  9. sw与matlab连接_solidworks与matlab联合仿真simMechnics下载及安装
  10. Ubuntu安装opencv的扩展模块-viz模块
  11. qlikview连接mysql_QlikView安装
  12. MPEG-TS 格式解析
  13. python 遍历,删除,复制文件夹下所有文件
  14. NS3中“E: package ‘gnuplot‘ has no installation candidate”问题解决方案
  15. 微擎 人人商城 对接京东vop 对接京东商品,同步商品 地址,库存,价格,上下架等。七 (上)之异常订单 后台功能完善...
  16. C语言猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时..
  17. 本地图片转网图url专用
  18. 生物蛋白质数据库类型【总结】
  19. L9110S电机驱动——让小车动起来
  20. [Python3] 线程池的使用

热门文章

  1. Struts2中Action接收参数
  2. DEDECMS后台上传banner图控制图片轮播
  3. Linux 文件系统及 ext2 文件系统
  4. 作业 3 应用分支与循环结构解决问题 统计字符个数
  5. matlab生成多组多维高斯分布数据
  6. linux的tar中ztvf,linux中的tar命令(2)
  7. c语言使能,什么是锁存使能输入
  8. python中字典添加键对_关于python:如何向字典添加键、值对?
  9. 电脑显示没有被指定在上运行_win10系统运行程序提示“dll没有被指定在windows上运行”的办法...
  10. matlab数据求加速度,通过从移动设备获取加速度数据对进行计步