Linux中PATH、 LIBRARY_PATH、 LD_LIBRARY_PATH和ROS_PACKAGE_PATH
PATH 保存可执行文件程序路径,我们命令行中每一句能运行的命令都是系统先通过PATH来找到命令执行文件所在的位置,再运行这个命令。
实验:执行echo $PATH 能看到当前环境PATH都是配置了哪些路径。
如果我需要在任何目录下都能执行某个bin文件夹下的可执行文件,那只需要将这个bin路径添加到PATH上即可。
设置:
方法一:export PATH=$PATH:xxx,但是登出后就失效。
方法二:修改~/.bashrc或系统级别的/etc/profile
1. 在其中添加例如export PATH=xxx:$PATH
2. source .bashrc (Source命令也称为“点命令”,也就是一个点符号(.),source命令通常用于重新执行刚修改的初始化文件,使之立即生效,而不必注销并重新登录 。
即可。
LIBRARY_PATH是在程序编译期间查找动态链接库时指定的查找共享库的路径。
LD_LIBRARY_PATH环境变量主要是用于指定动态链接器(ld)查找ELF可执行文件运行时所依赖的动态库(so)的路径,其内容是以冒号分隔的路径列表。
ld链接器将优先在该变量设置的路径中查找,若未找到则在标准库路径/lib和/usr/lib中继续搜索。
临时设置LD_LIBRARY_PATH环境变量的最佳方式是:
在执行你的程序前,先在bash中通过命令行来设置,这样你的特殊设置对系统的其它程序的运行而言是隔离的,不会影响其他程序对依赖库的查找路径,因为在bash中设置的环境变量只对本次会话有效。在你下次通过SSH工具连接到系统时,新会话的系统环境变量参数不受上次会话的设置影响。
如:
$ export LD_LIBRARY_PATH="/list/of/library/paths:/another/path"
$ ./program
但是,你如果希望对LD_LIBRARY_PATH环境变量的设置永久生效,上面的方式就不适合了。
如果你的所有程序都链接到某个自定义的查找路径指定的动态库文件,若某次执行程序前你忘记了设置LD_LIBRARY_PATH环境变量,这样你的程序会链接到其他动态库,可能会导致诡异的结果或意外崩溃,而且在可能存在潜在的安全问题。
如果不考虑上述的各种情况,你可以通过修改home目录下的
.bashrc
文件来设置LD_LIBRARY_PATH环境变量,这样每次当你启用一个会话连接到系统时,系统会自动执行该文件指定的命令,这样免去了每次手动设置相关参数的麻烦。
export LIBRARY_PATH="/list/of/library/paths:/another/path"
或者为所有用户修改这个值,修改/etc/profile文件即可。
一般情况下,只有当程序所需的依赖库不是系统标准安装的库或对库的版本特定要求时,可以指定 LD_LIBRARY_PATH环境变量实现。
通过下面的命令可以查看可执行文件或库文件本身对所依赖的库的情况:
$ ldd ~/myprogram
输出类似:
librt.so.1 => /lib/librt.so.1 (0x00002b4eca08e000)
libc.so.6 => /lib/libc.so.6 (0x00002b4eca49f000)
libpthread.so.0 => /lib/libpthread.so.0 (0x00002b4eca7df000)
/lib64/ld-linux-x86-64.so.2 (0x00002b4ec9e72000)
libmylib.so.1 => not found
检查结果表明, 链接器无法找到依赖的库libmylib.so.1
我们假设存在这个库 在~/yprogdir/lib/libmylib.so.1, 现在我们可能通过设置LD_LIBRARY_PATH环境变量以便链接器找到。
$ export LD_LIBRARY_PATH="~/myprogdir/lib/:$LD_LIBRARY_PATH"
$ ldd ~/myprogram
输出如下:
librt.so.1 => /lib/librt.so.1 (0x00002b4eca08e000)
libc.so.6 => /lib/libc.so.6 (0x00002b4eca49f000)
libpthread.so.0 => /lib/libpthread.so.0 (0x00002b4eca7df000)
/lib64/ld-linux-x86-64.so.2 (0x00002b4ec9e72000)
libmylib.so.1 => ~/myprogdir/lib/libmylib.so.1 (0x00002b4eca9fa000)
这样动态链接器就可能找到所有需要的库文件 。
LIBRARY_PATH和LD_LIBRARY_PATH共同点都是库的路径,而PATH是可执行文件的路径。
PATH是可执行文件路径,是三个中我们最常接触到的,因为我们命令行中的每句能运行的命令,如ls、top、ps等,都是系统通过PATH找到了这个命令执行文件的所在位置,再run这个命令(可执行文件)。
作者:煎鱼不可能有BUG
链接:https://www.imooc.com/article/43747
来源:慕课网
本文原创发布于慕课网 ,转载请注明出处,谢谢合作
Linux中PATH、 LIBRARY_PATH、 LD_LIBRARY_PATH和ROS_PACKAGE_PATH的更多相关文章
- Linux中PATH环境变量的作用和使用方法
关于PATH的作用:PATH说简单点就是一个字符串变量,当输入命令的时候LINUX会去查找PATH里面记录的路径.比如在根目录/下可以输入命令ls,在/usr目录下也可以输入ls,但其实ls这个命令根 ...
- linux环境 :Linux 共享库LIBRARY_PATH, LD_LIBRARY_PATH 与ld.so.conf
参考: 1. Linux 共享库:LD_LIBRARY_PATH 与ld.so.conf Linux环境变量名,该环境变量主要用于指定查找共享库(动态链接库)时除了默认路径之外的其他路径.(该路径在默 ...
- linux环境 :LIBRARY_PATH, LD_LIBRARY_PATH区别
参考: https://www.cnblogs.com/mylinux/p/4955448.html LIBRARY_PATH和LD_LIBRARY_PATH是Linux下的两个环境变量,二者的含义和 ...
- Linux有问必答:如何在Linux中修改环境变量PATH
提问: 当我试着运行一个程序时,它提示“command not found”. 但这个程序就在/usr/local/bin下.我该如何添加/usr/local/bin到我的PATH变量下,这样我就可以 ...
- 转:Linux中find命令-path -prune用法详解
在Windows中可以在某些路径中查找文件,也可以设定不在某些路径中查找文件,下面用Linux中的find的命令结合其-path -prune参数来看看在Linux中怎么实现此功能. 假如在当前目录下 ...
- Linux 中C/C++ search path(头文件搜索路径)
https://blog.csdn.net/BjarneCpp/article/details/76135980 起因 我拿到了一套Linux下的C++代码,代码中有这个头文件#include < ...
- 转:Linux环境变量设置方法总结 PATH、LD_LIBRARY_PATH
转: https://www.linuxidc.com/Linux/2017-03/142338.htm 文章写比较全 转载记录 Linux环境变量设置方法总结 PATH.LD_LIBRARY_P ...
- Linux中的环境变量PATH
一.介绍 在讲环境变量之前,先介绍一下命令which,它用于查找某个命令的绝对路径,示例如下: 在上面的示例中,用which查到rm命令的绝对路径为/usr/bin/rm. 那么问题来了:为什么我们使 ...
- linux 环境变量设置方法总结(PATH/LD_LIBRARY_PATH)
linux 环境变量设置方法总结(PATH/LD_LIBRARY_PATH) http://blog.csdn.net/wangeen/article/details/8159500 设置 Linux ...
随机推荐
- hex、Base64
一.什么是Hex 将每一个字节表示的十六进制表示的内容,用字符串来显示. 二.作用 将不可见的,复杂的字节数组数据,转换为可显示的字符串数据 类似于Base64编码算法 区别:Base64将三个字节转 ...
- POJ 1284:Primitive Roots 求原根的数量
Primitive Roots Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 3381 Accepted: 1980 D ...
- bzoj 3732Network
先搞个最小生成树,然后lca(和之前的一个cf题差不多2333, 纯属颓废了..) 顺便思考了一下正确性. 因为所求的是所有路径中最大边的最小值.而kruskal每次往里添加的就是最小边.所以在生成树 ...
- windows 2008R2 搭建web实现https访问
一.安装服务. 二.IIS创建证书申请. 三.ca颁发证书 三.创建网站. 创建一个新建文件夹,并在文件夹中创建一个txt文件. 把新建文本文档.txt重命名为index.html 完成证书申请(导入 ...
- Spring Boot without the web server
https://stackoverflow.com/questions/26105061/spring-boot-without-the-web-server/28565277 1. spring.m ...
- trove database功能总结
我曾经以为trove只负责数据库(datastore)的部署,最近才发现trove可以进行数据库(database)的创建. 首先是列出某个实例上(instance)数据库(datastrore)上的 ...
- ORACLE常见问题收集
1.Java代码执行oracle,update和insert语句卡住不动 解决方法:造成这样的情况原因在于你之前执行了update或insert操作但你并没有commit,导致你操作的这条记录被ora ...
- 阿里云服务器搭建详解——Ubuntu
由于自己电脑配置跟不上,双系统一开,整个电脑就会变得非常卡顿,所以决定在阿里云买一个云服务器.听朋友说,学生买的话是非常便宜的,比每月开个SVIP还便宜.今天上网看了下,果然如此,每月只要9.9,确实 ...
- Python Learning Day3
爬虫练习 说是练习,实际是尝试了一些还没有具体了解的方式吧hhhhh' 基于urllib实现 import urllib.request import re url="https://www ...
- 实验吧web-易-这个看起来有点简单
看url中有id=1,明显的sql注入,这里使用手工注入不适用sqlmap,想用的话参考文章(传送门) 1.首先测试有没有sql注入漏洞, http://ctf5.shiyanbar.com/8/in ...