export引发的血案,ldd not found问题分析
来源:互联网 发布:中国武术不堪一击知乎 编辑:程序博客网 时间:2024/06/03 19:30
今天在一台服务器编译程序时的时候报错,
[huaizhi@localhost ~]gcc test.c -o test
/usr/local/libexec/gcc/x86_64-linux-gnu/4.7.1/cc1: error while loading shared libraries: libmpc.so.3: cannot open shared object file: No such file or directory
进一步的分析发现,这个so确实无法链接,not found
[huaizhi@localhost ~]$ ldd /usr/local/libexec/gcc/x86_64-linux-gnu/4.7.1/cc1
linux-vdso.so.1 => (0x00007fff319ff000)
libmpc.so.3 => not found
libmpfr.so.4 => not found
libgmp.so.10 => not found
libdl.so.2 => /lib64/libdl.so.2 (0x0000003279000000)
libz.so.1 => /lib64/libz.so.1 (0x0000003279c00000)
libc.so.6 => /lib64/libc.so.6 (0x0000003279400000)
/lib64/ld-linux-x86-64.so.2 (0x0000003278c00000)
用ldconfig确认在ld Cache中不存在这个so:
[huaizhi@localhost ~]$ ldconfig -p|grep libmpc
但是实际上这个so在文件系统中是存在的
[huaizhi@localhost ~]$ locate -r libmpc.so
/usr/local/lib/libmpc.so
/usr/local/lib/libmpc.so.3
/usr/local/lib/libmpc.so.3.0.0
那么有两个方法可以解决这个问题:
方法1:在/etc//etc/ld.so.conf增加动态库路径,并且调用ldconfig更新ld Cache
include ld.so.conf.d/*.conf
/usr/local/lib #注意此处的格式!!!
在ldconfig生效后,通过ldconfig -p能够找到需要cc1需要动态库,此时gcc可以编译过
方法2:通过$LD_LIBRARY_PATH 增加动态库搜索路径,我在.bash_profile中发现$LD_LIBRARY_PATH 已经添加了路径/usr/local/lib/
[huaizhi@localhost ~]$ echo $LD_LIBRARY_PATH
/usr/local/lib64:/usr/local/lib:/home/huaizhi/lib:/
那是什么原因呢?
最终发现是由于这个环境变量$LD_LIBRARY_PATH 没有export导致的(可以通过命令 export|grep LD_LIBRARY_PATH来确认一下)
这将导致shell调用gcc的时候无法传递这个环境变量,gcc在调用cc1的时候也就无法完成cc1的动态库链接动作
因此.bash_profile中需要修改为
PATH=$HOME/usr/local/bin:$PATH:$HOME/bin
LD_LIBRARY_PATH=/usr/local/lib64:/usr/local/lib:$HOME/lib:/$LD_LIBRARY_PATH
export PATH
export LD_LIBRARY_PATH
- export引发的血案,ldd not found问题分析
- org.apache.ibatis.binding.BindingException: Invalid bound statement (not found) 引发的血案
- 一个时区问题引发的血案
- 一个知乎问题引发的血案
- export:Command not found
- linux上编译动态库,ldd的时候not found
- ActiveX引发的“血案”
- size_t引发的血案
- 一个 * 引发的血案
- gets引发的血案
- Print 引发的“血案”
- lease引发的血案
- 一个“-”引发的血案
- MD5引发的血案
- 一个"/"引发的血案
- wrap_content引发的血案
- merge_all引发的血案
- PersistableBundle引发的血案
- 关于iOS的block块代码的理解
- 算法与数据结构第三次作业 序列判断
- Unity3D中的JavaScript语言基础
- 程序员非技术面试题
- 海量数据-事务一致性2
- export引发的血案,ldd not found问题分析
- makefile 规则符号
- Objective-C之成魔之路【8-访问成员变量和属性】
- printk消息日志等级
- Ubuntu 下Laravel 路由失败原因分析
- 网络爬虫中的Queue源码
- 网络爬虫中的LinQueue类源码
- 易语言-从网络列表下载数据并加载到内存数组
- 网络爬虫DownLoadFile类