LD_LIBRARY_PATH与-L的关系以及延伸
最近跟同学讨论c++在编译时g++ -L.. 和LD_LIBRARY_PATH的问题,今天在做一个东西的时候发现,我对这两个东西的理解是错误的,经过一番研究,写下我对这些东西的想法,如果有不对的地方,欢迎指正。
我遇到的问题:
g++ multiple.cpp -L/usr/local/lib -lboost_program_options编译完后,ldd ./a.out发现
libboost_program_options.so.1.55.0 => not found
但是,当我在.bashrc里面写入:
export LD_LIBRARY_PATH=/usr/local/lib,然后再编译,我发现可以了,
这是为什么呢?
LD_LIBRARY_PATH是一个环境变量,它的作用是让动态链接库加载器(ld.so)在运行时(run-time)有一个额外的选项,即增加一个搜索路径列表。注意,LD_LIBRARY_PATH是在运行时,才起作用。这个环境变量中,可以存储多个路径,用冒号分隔。它的厉害之处在于,搜索LD_LIBRARY_PATH所列路径的顺序,先于嵌入到二进制文件中的运行时搜索路径,也先于系统默认加载路径(如/usr/lib)[摘自:http://www.ituring.com.cn/article/22101]
g++ -L:是在编译的时候,去-L指定的地方找库,-l库的名字
上面问题的解释:我在编译的时候,用-L -l使程序正确编译了,但是没有指定运行时库去哪些地方寻找库,而默认的地方不包括/usr/loca/lib,这就造成了./a.out找不到libboost_program_options.so库,也就出现了上面的问题。
缺点:
LD_LIBRARY_PATH是库一般是在run-time linking搜索的路径,但是使用这种方法不管在compiling linking还是run-time linking都是有严重的副作用
gcc/g++ -L在compiling linking搜索的路径,保证你所编译所需的符号是存在的
如果设置了LD_LIBRARY_PATH,那么你设置的路径会优先寻找,而且比默认的标准路径还要早。
最新文章
- [工作中的设计模式]装饰模式decorator
- NSDecimalNumber用于精度准确的计算
- R语言apply函数族笔记
- JProfiler使用入门(一)——准备工作
- STL容器的遍历删除
- KVC和KVO的区别
- LeetCode: 3SumClosest
- 如何使一个网络下的2台路由器都可以dhcp上网
- 增强 Sublimetext3
- .Net Core 部署 CentOs7+Nginx
- Mac终端下的svn使用教程
- kaili Linux学习推荐网站
- python中import和from-import的区别
- VMware的存储野心(上):软件定义、分布式DAS支持
- 2017年CCF大数据与计算智能大赛,梳理总结新鲜出炉啦~~~
- python合并图片
- php -- 用文本来存储内容,file_put_contents,serialize,unserialize
- Makefile编写 五 隐含规则
- Linux下shellcode的编写
- AGC025简要题解