最近跟同学讨论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,那么你设置的路径会优先寻找,而且比默认的标准路径还要早。

最新文章

  1. [工作中的设计模式]装饰模式decorator
  2. NSDecimalNumber用于精度准确的计算
  3. R语言apply函数族笔记
  4. JProfiler使用入门(一)——准备工作
  5. STL容器的遍历删除
  6. KVC和KVO的区别
  7. LeetCode: 3SumClosest
  8. 如何使一个网络下的2台路由器都可以dhcp上网
  9. 增强 Sublimetext3
  10. .Net Core 部署 CentOs7+Nginx
  11. Mac终端下的svn使用教程
  12. kaili Linux学习推荐网站
  13. python中import和from-import的区别
  14. VMware的存储野心(上):软件定义、分布式DAS支持
  15. 2017年CCF大数据与计算智能大赛,梳理总结新鲜出炉啦~~~
  16. python合并图片
  17. php -- 用文本来存储内容,file_put_contents,serialize,unserialize
  18. Makefile编写 五 隐含规则
  19. Linux下shellcode的编写
  20. AGC025简要题解

热门文章

  1. 自定义的强大的UITableViewCell
  2. Linux文件系统与磁盘管理
  3. Django项目开发-小技巧
  4. 算法导论—无向图的遍历(BFS+DFS,MATLAB)
  5. Cocos2d-X-3.0 之后的版本的环境搭建
  6. Codeforces 794F. Leha and security system 线段树
  7. C项目实践--贪吃蛇(2)
  8. C++不能在栈上申请动态内存,而只能依靠指针
  9. SQL Server 2012 从备份中还原数据库
  10. Spring-AOP解析