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,那么你设置的路径会优先寻找,而且比默认的标准路径还要早。
LD_LIBRARY_PATH与-L的关系以及延伸的更多相关文章
- 有关LD_LIBRARY_PATH与ld.so.conf
我之前写过一篇关于LD_LIBRARY_PATH与gcc/g++ -L的关系的文章,于是我自己用CPACK制作了一个Debian安装包,然后我在/home/.bashrc里添加了export LD_L ...
- 动态库的链接和链接选项-L,-rpath-link,-rpath
https://my.oschina.net/shelllife/blog/115958 链接动态库 如何程序在连接时使用了共享库,就必须在运行的时候能够找到共享库的位置.linux的可执行程序在执行 ...
- -L、-rpath和-rpath-link的区别
链接器ld的选项有 -L,-rpath 和 -rpath-link,看了下 man ld,大致是这个意思: -L:: “链接”的时候去找的目录,也就是所有的 -lFOO 选项里的库,都会先从 -L ...
- uml用例关系
关联关系 关联关系是指执行者与用例之间的关系,又称为通信关系,如果某个执行者可以对某个用例进行操作,它们之间就具有关联关系,如下图所示,“经理”有一个功能为“查看库存报表”,因此可以在执行者“经理”和 ...
- UML用例建模解析(二)---------用例执行者之间关系
(1) 关联关系 关联关系是指执行者与用例之间的关系,又称为通信关系,如果某个执行者可以对某个用例进行操作,它们之间就具有关联关系,如下图所示,“经理”有一个功能为“查看库存报表”,因此可以在执行者“ ...
- linux 编译,链接和加载
1. 序 最近在折腾各种.so,碰到了一些问题,一开始对于很多错误也没有头绪,茫然不知所措.索性化了一天多时间将<<程序员的自我修养—链接.装载与库>>中部分内容略读了一遍 ...
- Django--ORM基础
ORM(映射关系) 映射关系: 表名 <-------> 类名 字段 <-------> 属性 表记录 <------->类实例对象 创建表(建立模型) 在Djan ...
- Django中ORM增删改查
新建模型 class Author(models.Model): nid = models.AutoField(primary_key=True) name=models.CharField( max ...
- Django 模型系统(model)&ORM--基础
ORM 映射关系: 类 ---> 表 属性 ---> 字段 对象 --->一条数据 创建表(建立模型) 实例:我们来假定下面这些概念,字段和关系 作者模型:一个作者有姓名和年龄. 作 ...
随机推荐
- Visual Studio VS如何切换代码自动换行
工具-选项-文本编辑器-自动换行
- UI 07 _ 导航视图控制器 与 属性传值
首先, 先创建三个VC. 完毕点击按钮, 进入下一页, 并可以返回. 要先把导航视图控制器创建出来. 在AppDelegate.m 文件里代码例如以下: #import "AppDelega ...
- DosBox 报错 this program requires dosxnt.exe to be in your path
也就是少了dosxnt.exe文件,能够上网搜索下载,把dosxnt 拷贝到你挂截文件夹下就能够执行 Dosxnt文件下载
- <Android>greenrobot-EventBus,guava-Event Bus的异步实现
刚開始是从otto入手,可是otto不支持异步运行.所以后来才開始研究了Event Bus.关于Event Bus,先前搜索的时候,看到网上的实例,非常碎,并且非常多都是一样的内容,代码看下来基本上是 ...
- SpringMVC+MyBatis+JMS+JTA(分布式事务)
SpringMVC+MyBatis 相信已经是如今企业开发中经常使用技术了. 由于一些需求,我们须要集成JMS(我使用的是ActiveMQ).大家应该都知道.MQ也能够觉得是一个数据源.数据也是数据源 ...
- TPC-H is a Decision Support Benchmark
TPC-H is a Decision Support Benchmark http://www.dba-oracle.com/t_tpc_benchmarks.htm
- LEA指令与MOV指令的区别——发现一本汇编好书
一.汇编语言中PTR的含义及作用mov ax,bx ;是把BX寄存器“里”的值赋予AX,由于二者都是word型,所以没有必要加“WORD”mov ax,word ptr [bx];是把内存地址等于“B ...
- jvm部分知识总结
1.jvm有三种执行模式,分别是解释执行,混合执行和编译执行,默认情况是混合执行模式. java version " Java(TM) SE Runtime Environment (bui ...
- 第一个Java程序示例——Hello World!【转】
本文转载自: 跟随世界潮流,第一个Java程序输出“Hell World!”. 通过Eclipse运行程序 启动Eclipse,在菜单中选择“文件 --> 新建 --> Java项目”,弹 ...
- UVa 1471 Defense Lines (二分+set优化)
题意:给定一个序列,然后让你删除一段连续的序列,使得剩下的序列中连续递增子序列最长. 析:如果暴力枚举那么时间复杂度肯定受不了,我们可以先进行预处理,f[i] 表示以 i 结尾的连续最长序列,g[i] ...