Linux环境下动态库的问题

Normal 0 7.8 磅 0 2 MicrosoftInternetExplorer4 1.     Linux 环境下动态库的问题

1.1.   问题描述

系统运行过程中,之前本来跑的好好的程序down了之后再重启,运行结果又不同了,甚至segment fault。这是一个常见又棘手的问题。

1.2.   排查

首先ldd,排查程序的动态链接库,在多用户开发的系统环境下,系统变量经常被别人修改,尤其关注与动态链接库相关的LD_LIBRARY_PATH变量

程序编译时,动态库的搜索顺序如下:
  
1ld-linux.so.6gccspec文件中所设定
  
2gcc --print-search-dirs所打印出的路径,主要是libgcc_s.so等库。可以通过GCC_EXEC_PREFIX来设定
  
3LIBRARY_PATH环境变量中所设定的路径,或编译的命令行中指定的-L/usr/local/lib
  
2binutils中的ld所设定的缺省搜索路径顺序,编译binutils时指定。(可以通过“ld --verbose | grep SEARCH”查看)

程序运行时,动态库的装载依赖于ld-linux.so.6的实现,它查找共享库的顺序如下:
  
1ld-linux.so.6在可执行的目标文件中被指定,可用readelf命令查看
    
2ld-linux.so.6缺省在/usr/liblib中搜索;当glibc安装到/usr/local下时,它查找/usr/local /lib
  
3LD_LIBRARY_PATH环境变量中所设定的路径
  
4/etc/ld.so.conf(或/usr/local/etc/ld.so.conf)中所指定的路径,由ldconfig生成二进制的 ld.so.cache

 

   无论是程序编译还是执行,LD_LIBRARY_PATH是一个非常重要的环境变量,而且在多用户开发的系统环境下,还经常根据系统配置文件的修改而被修改,导致之前本来跑的好好的程序down了之后再重启,运行结果又不同了。

   环境变量的设置

1/etc/profile 此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行. 并从/etc/profile.d目录的配置文件中搜集shell的设置。

2/etc/bashrc: 为每一个运行bash shell的用户执行此文件.bash shell被打开时,该文件被读取。

3~/.bash_profile: 每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次!默认情况下,他设置一些环境变量,执行用户 .bashrc文件。

4~/.bashrc: 该文件包含专用于你的bash shellbash信息,当登录时以及每次打开新的shell,该该文件被读取。

5~/.bash_logout:当每次退出系统(退出bash shell),执行该文件. 另外,/etc/profile中设定的变量(全局)的可以作用于任何用户,~/.bashrc等中设定的变量(局部)只能继承 /etc/profile中的变量,他们是"父子"关系。

6~/.bash_profile 是交互式、login 方式进入 bash 运行的~/.bashrc 是交互式 non-login 方式进入 bash 运行的通常二者设置大致相同,所以通常前者会调用后者。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/16856446/viewspace-677382/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/16856446/viewspace-677382/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值