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的更多相关文章

  1. Linux中PATH环境变量的作用和使用方法

    关于PATH的作用:PATH说简单点就是一个字符串变量,当输入命令的时候LINUX会去查找PATH里面记录的路径.比如在根目录/下可以输入命令ls,在/usr目录下也可以输入ls,但其实ls这个命令根 ...

  2. linux环境 :Linux 共享库LIBRARY_PATH, LD_LIBRARY_PATH 与ld.so.conf

    参考: 1. Linux 共享库:LD_LIBRARY_PATH 与ld.so.conf Linux环境变量名,该环境变量主要用于指定查找共享库(动态链接库)时除了默认路径之外的其他路径.(该路径在默 ...

  3. linux环境 :LIBRARY_PATH, LD_LIBRARY_PATH区别

    参考: https://www.cnblogs.com/mylinux/p/4955448.html LIBRARY_PATH和LD_LIBRARY_PATH是Linux下的两个环境变量,二者的含义和 ...

  4. Linux有问必答:如何在Linux中修改环境变量PATH

    提问: 当我试着运行一个程序时,它提示“command not found”. 但这个程序就在/usr/local/bin下.我该如何添加/usr/local/bin到我的PATH变量下,这样我就可以 ...

  5. 转:Linux中find命令-path -prune用法详解

    在Windows中可以在某些路径中查找文件,也可以设定不在某些路径中查找文件,下面用Linux中的find的命令结合其-path -prune参数来看看在Linux中怎么实现此功能. 假如在当前目录下 ...

  6. Linux 中C/C++ search path(头文件搜索路径)

    https://blog.csdn.net/BjarneCpp/article/details/76135980 起因 我拿到了一套Linux下的C++代码,代码中有这个头文件#include < ...

  7. 转:Linux环境变量设置方法总结 PATH、LD_LIBRARY_PATH

    转:  https://www.linuxidc.com/Linux/2017-03/142338.htm 文章写比较全  转载记录 Linux环境变量设置方法总结 PATH.LD_LIBRARY_P ...

  8. Linux中的环境变量PATH

    一.介绍 在讲环境变量之前,先介绍一下命令which,它用于查找某个命令的绝对路径,示例如下: 在上面的示例中,用which查到rm命令的绝对路径为/usr/bin/rm. 那么问题来了:为什么我们使 ...

  9. linux 环境变量设置方法总结(PATH/LD_LIBRARY_PATH)

    linux 环境变量设置方法总结(PATH/LD_LIBRARY_PATH) http://blog.csdn.net/wangeen/article/details/8159500 设置 Linux ...

随机推荐

  1. Vue 获取时间戳返回自定义时间格式

    直接在Vue全局函数定义: Vue.prototype.padLeftZero = function(str) { return ('00' + str).substr(str.length); }; ...

  2. 19 01 16 jquery 的 属性操作 循环 jquery 事件 和事件的绑定 解绑

    jquery属性操作 1.html() 取出或设置html内容 // 取出html内容 var $htm = $('#div1').html(); // 设置html内容 $('#div1').htm ...

  3. mui 横屏 竖屏

    在项目中只有某个页面需要横屏 ,其他的都是竖屏展示的. 假设a页面横屏 ,返回之后竖屏 b页面 a+ 将其设置为横屏显示: b+ 将其设置为竖屏显示 但是进入a页面之后再返回b页面时 b页面也会称为横 ...

  4. 汇编,寄存器,内存,mov指令

    一.代码 和 汇编 和 二进制之间的关系 二.复习一下计算机组成原理的知识 1.寄存器 计算机中有三个存储 32位cpu提供的寄存器有三种类型8位 16位 32位 64位的只是32位的扩展 并且程序大 ...

  5. JS高级学习笔记(10) 之 js 时怎么解析HTML标签的

    DOM 节点类型 浏览器渲染过程 浏览器是怎么把HTML标签语言和JavaScript联系在一起的,这就是我们常说的DOM. 浏览器中的DOM解析器把HTML翻译成对象(object),然后JavaS ...

  6. JPA 开发中遇到的错误

    JPA 开发中遇到的错误 (2011-07-13 16:56:12) 转载▼ 标签: 杂谈 分类: Java/J2EE 常见异常1.异常信息:org.hibernate.hql.ast.QuerySy ...

  7. Codeforces 1290A/1291C - Mind Control

    题目大意: 总共有n个人和n个数字 n个人拍成一队,n个数字也是有顺序的 你排在第m个位置 按照顺序的每个人可以拿走这个序列中的第一个数字或者最后一个数字 你可以在所有人操作开始前说服最多k个人 让他 ...

  8. webview HttpClient 怎么保持会话session统一

      cookies session均为key---value的形式展示,  1.    session是存储在服务端,并有一块区域控件存储用户信息,主要是为了判断该用户是否登录,在客户端采用httpC ...

  9. Java 过滤器Filter,Java Filter 不拦截某些请求 Java 过滤器支持Ajax请求

    ================================ ©Copyright 蕃薯耀 2020-01-10 https://www.cnblogs.com/fanshuyao/ 一.Java ...

  10. Mysql插入数据里有中文字符出现Incorrect string value的错误

    问题:Mysql插入数据里有中文字符出现Incorrect string value的错误   描述:CMD里直接敲代码插入数据   提示的部分截取为:ERROR 1366 (HY000): Inco ...