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
来源:慕课网
本文原创发布于慕课网 ,转载请注明出处,谢谢合作

最新文章

  1. oracle TBL$OR$IDX$PART$NUM BUG案例处理过程
  2. thymeleaf的常见用法
  3. Java核心知识点学习----多线程并发之线程间的通信,notify,wait
  4. C++字符转码
  5. Spring - 初始化spring容器
  6. 让多个Fragment 切换时不重新实例化、FragmentTabHost切换Fragment时避免UI重新加载
  7. 【转】工科男IT职场求生法则
  8. 【Java】WEB-INF目录与META-INF目录的作用
  9. 232. Implement Queue using Stacks,225. Implement Stack using Queues
  10. jQuery图片上传前先在本地预览(不经过后端处理)
  11. POJ1222熄灯问题
  12. android EventBus 3.0使用指南
  13. Redis 开启远程连接
  14. Oracle 11gR2使用RMAN duplicate复制数据库
  15. P1186 玛丽卡 删边最短路最大值
  16. CentOS 7搭建OpenVPN-Admin
  17. Java使用独立数据库连接池(DBCP为例)
  18. js操作cookie总结 及乱码
  19. Hibernate 一对一
  20. 关于右键属性与du -sh显示的文件大小不一致的解决

热门文章

  1. Vulkan SDK之 CommandBuff
  2. UVALive 3634 数据结构模拟
  3. 《机实战》第2章 K近邻算法实战(KNN)
  4. 吴裕雄--天生自然 JAVASCRIPT开发学习:条件语句
  5. SASS - 使用Sass程序
  6. DP背包问题学习笔记及系列练习题
  7. ES6的一些语法
  8. id就是方法名,如何调用;批量input怎么获取他们的key值作为参数
  9. 十分简明易懂的FFT(快速傅里叶变换)
  10. Centos7 死循环登录问题