【Linux】PATH和LD_LIBRARY_PATH的区别

PATH与LD_LIBRARY_PATH的区别

PATHLD_LIBRARY_PATH 是Linux和类Unix操作系统中的两个环境变量,它们在系统中扮演着不同但重要的角色。尽管它们的名称和用途在某种程度上相似,但它们用于指定的路径类型和目的有明显的区别。

PATH

  • 用途PATH 环境变量用于定义系统在响应用户或程序的执行命令时应当搜索可执行文件的目录列表。
  • 工作方式:当你在命令行输入一个命令时,系统会根据 PATH 环境变量中列出的目录顺序来搜索这个命令对应的可执行文件。如果找到了,就执行这个文件。
  • 示例:如果你的 PATH 包含 /usr/bin,当你尝试执行 ls 命令时,系统会在 /usr/bin 目录下搜索名为 ls 的可执行文件。

LD_LIBRARY_PATH

  • 用途LD_LIBRARY_PATH 环境变量用于定义系统在运行可执行文件时,应当搜索动态链接库(.so 文件)的目录列表。
  • 工作方式:当一个程序需要加载动态链接库(即共享对象文件)时,系统会根据 LD_LIBRARY_PATH 环境变量中列出的目录顺序来搜索这些库。如果找到了需要的库,系统就会加载它们,以便程序可以使用库中定义的函数和资源。
  • 示例:如果你的 LD_LIBRARY_PATH 包含 /usr/local/lib,当某个程序尝试加载动态库时,系统会首先在 /usr/local/lib 目录下查找这些库文件。

区别总结

  • 目的PATH 用于查找可执行文件,而 LD_LIBRARY_PATH 用于查找动态链接库。
  • 影响对象PATH 影响命令的查找和执行,LD_LIBRARY_PATH 影响程序运行时动态库的查找和加载。
  • 使用场景PATH 更多地关注于用户和系统的交互,即如何快速找到并执行用户请求的命令;LD_LIBRARY_PATH 更多地关注于程序的运行时环境,即程序运行时如何找到它需要的动态链接库。

了解这两个环境变量的区别对于有效地配置和管理Linux和类Unix操作系统的环境非常重要,可以帮助确保命令和程序能够正确地找到它们需要的资源。

以.so结尾的文件通常是用作什么的?通俗解释?

.so 结尾的文件是在Linux和类Unix操作系统中使用的“共享对象”(Shared Object)文件。可以将它们理解为Windows系统中的 .dll 文件(动态链接库),它们都是一种动态库文件。

共享对象文件的作用

  • 代码重用和模块化:开发者可以将常用的函数和资源打包成共享对象文件,这样不同的程序就可以共享这些代码和资源,而不需要在每个程序中重复编写相同的代码。这样做既节省了磁盘空间,又提高了代码的维护效率。
  • 节省内存:当多个正在运行的程序同时使用同一个共享对象文件时,这个文件只需要在内存中有一份拷贝,所有程序都可以共享这份拷贝。这样可以有效减少程序运行时占用的内存量。
  • 动态链接:共享对象文件在程序运行时被动态地链接到程序中,而不是在程序编译时静态地嵌入。这意味着,如果共享对象文件被更新或替换,使用这个共享对象的程序可以直接利用新版本,而不需要重新编译程序。

使用场景

共享对象文件在许多场景中都非常有用,比如:

  • 操作系统的系统库:操作系统的许多核心功能和API都封装在共享对象文件中,供所有程序使用。
  • 第三方库:很多第三方开发库(如图形处理库、数学计算库等)提供.so文件,以便开发者在自己的程序中使用这些库的功能。
  • 插件和扩展:一些程序支持通过加载.so文件来添加新功能或扩展现有功能,这允许程序在不修改原始代码的情况下增加新的特性。

总结

总的来说,.so文件是Linux和类Unix系统中的动态库文件,它们使得代码重用、内存使用优化和动态链接成为可能,对于构建模块化、高效和易于维护的软件系统至关重要。

什么时候export bin/ export lib

换种说法,什么时候export bin,export lib有什么讲究吗?
PATH :指定可执行文件的搜索路径。

  • 例如,如添加环境变量时
  • export PATH=/opt/conda/bin:$PATH

LD_LIBRARY_PATH: 共享库文件的搜索路径。

  • 例如,export LD_LIBRARY_PATH=/usr/local/cuda-11.2/lib64:$LD_LIBRARY_PATH

在Linux和类Unix系统中,环境变量是用来定义操作系统运行时环境的参数。PATHLD_LIBRARY_PATH是两个常见的环境变量,分别用于指定可执行文件的搜索路径和共享库文件的搜索路径。当你使用export命令来设置这些环境变量时,你是在告诉操作系统在哪里查找它需要的文件。

何时使用export添加到PATH

当你安装了一个程序或脚本,并希望能够从任何地方通过终端直接调用它时,你应该将它的安装目录添加到PATH环境变量中。这样,你就不需要每次都输入完整的路径来运行程序了。

例如,如果你有一个可执行文件在/home/username/bin目录下,你可以这样添加到PATH

export PATH=/home/username/bin:$PATH

这个命令将/home/username/bin目录添加到现有的PATH环境变量之前,确保系统首先在这个目录中查找可执行文件。


何时使用export添加到LD_LIBRARY_PATH

如果你安装了一些程序或库,它们依赖于特定的共享库(.so 文件),而这些共享库不在系统默认的库搜索路径中,你可能需要将这些库的路径添加到LD_LIBRARY_PATH环境变量中。

例如,如果你的程序依赖于一些位于/home/username/lib目录下的共享库,你可以这样设置:

export LD_LIBRARY_PATH=/home/username/lib:$LD_LIBRARY_PATH

这个命令将/home/username/lib添加到现有的LD_LIBRARY_PATH环境变量之前,让系统在启动程序时首先在这个目录中查找所需的共享库。

注意

  • 修改PATHLD_LIBRARY_PATH只对当前会话有效。如果你想要永久修改,你需要将相应的export命令添加到你的shell配置文件中,比如~/.bashrc~/.profile,具体取决于你使用的shell。
  • 频繁修改LD_LIBRARY_PATH可能会导致系统运行不稳定,因为它可能会覆盖系统默认的库搜索路径,导致系统使用错误的版本的共享库。因此,在使用LD_LIBRARY_PATH时要特别小心。
  • 在某些情况下,软件安装程序会自动处理环境变量的设置,你可能不需要手动设置。始终参考软件的安装说明来确定最佳做法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/759618.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

生成独立的zedboard+ad9361起始项目

文件分享 链接:https://pan.baidu.com/s/17wB_9xVWjO7HhxNvmmZyuA 提取码:94zz 首先下载HDL和NO-OS项目 git clone --recursive https://github.com/analogdevicesinc/hdl git clone --recursive https://github.com/analogdevicesinc/no-OS下载…

用人工智能大模型预报气象,中国气象局示范计划公开征集火热报名中

近日,中国气象局发布了人工智能气象预报大模型示范计划(以下简称“示范计划”),推进气象大模型标准规范和有序发展,引导解决预报业务实际难题,促进人工智能气象预报大模型业务的应用转化、准入,…

【Linux】初识操作系统

一、冯•诺依曼体系结构 在学习操作系统之前,我们先来认识一下冯•诺依曼体系结构,我们常见的计算机,如笔记本。我们不常见的计算机,如服务器,大部分都遵守冯诺依曼体系。 截至目前,我们所认识的计算机&am…

Navicat上新啦

前言 Navicat,在数据库界,几乎是一个神奇的存在,似乎统治了数据库开发工具的“一片天”。且看下图: 红的蓝的绿的橙的…,可以说,留给它的color不多了。 那么商业BI到服务监控、从云托管到云协作&#xff…

VUE3-Elementplus-form表单-笔记

1. 结构相关 el-row表示一行,一行分成24份 el-col表示列 (1) :span"12" 代表在一行中,占12份 (50%) (2) :span"6" 表示在一行中,占6份 (25%) (3) :offset"3" 代表在一行中,左侧margin份数 el…

5G NR PUSCH物理层过程

物理层过程 加扰 假设要在单个码字q上传输的bit块为 b ( q ) ( 0 ) , . . . , b ( q ) ( M b i t ( q ) − 1 ) b^{(q)}(0),...,b^{(q)}(M_{bit}^{(q)} - 1) b(q)(0),...,b(q)(Mbit(q)​−1) ,其中 M b i t ( q ) M_{bit}^{(q)} Mbit(q)​是总比特数,加…

《昇思25天学习打卡营第16天 | 昇思MindSpore基于MobileNetv2的垃圾分类》

16天 本节学习了垃圾分类代码开发的方法。通过读取本地图像数据作为输入,对图像中的垃圾物体进行检测,并且将检测结果图片保存到文件中。 MobileNet网络是由Google团队于2017年提出的专注于移动端、嵌入式或IoT设备的轻量级CNN网络,相比于传…

2024.6.30周报

目录 摘要 ABSTRACT 一、文献阅读 一、题目 二、摘要 三、模型架构 四、文章解读 一、Introduction 二、创新点 三、RBM 四、贪心算法 五、实验 六、结论 二、代码复现 总结 摘要 本周我阅读了一篇题目为Generative Pre-Trained Physics-Informed Neural Netwo…

树莓派4B学习笔记16:Python引用自定义模块_简单模块化

今日继续学习树莓派4B 4G:(Raspberry Pi,简称RPi或RasPi) 本人所用树莓派4B 装载的系统与版本如下: 版本可用命令 (lsb_release -a) 查询: Python 版本3.7.3: 今日学习:Python引用自定义模块 文章提供测试…

【机器学习】机器学习的重要方法——强化学习:理论,方法与实践

目录 一、强化学习的核心概念 二、强化学习算法的分类与示例代码 三.强化学习的优势 四.强化学习的应用与挑战 五、总结与展望 强化学习:理论,方法和实践 在人工智能的广阔领域中,强化学习(Reinforcement Learning, RL&…

一文带你了解乐观锁和悲观锁的本质区别!

文章目录 悲观锁是什么?乐观锁是什么?如何实现乐观锁?什么是CAS应用局限性ABA问题是什么? 悲观锁是什么? 悲观锁它总是假设最坏的情况,它会认为共享资源在每次被访问的时候就会出现线程安全问题&#xff0…

SCI二区|北极海鹦优化算法(APO)原理及实现【免费获取Matlab代码】

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.结果展示4.参考文献5.代码获取 1.背景 2024年,W Wang受到北极海鹦的生存和捕食行为启发,提出了北极海鹦优化算法(Arctic Puffin Optimization, APO)。 2.算法原理 2.1算法思想 …

Unity Shader 极坐标

Unity Shader 极坐标 前言项目简单极坐标极坐标变体之方形极坐标变体之圆形拉花 鸣谢 前言 极坐标记录 项目 简单极坐标 极坐标变体之方形 极坐标变体之圆形 拉花 鸣谢 【菲兹杂货铺】【Unity Shader教程】极坐标实现以及极坐标的两种变体

【Android】在App里面安装Apk文件

项目需求 在一个App里面内置一个第三方的APK文件,然后通过这个App可以安装这个APK文件。 需求实现 1.内置APK文件 在App里面创建一个assets文件夹,然后把想要安装的APK文件放到这里面。 2.定义文件路径访问权限 创建一个文件,命名【file…

springcloud第4季 seata报could not find any implementation for class

一 问题说明 1.1 描述 在使用seata2.0alibaba-cloud 2022.0.0.0-RC2nacos 2.2.3 模拟下订单分布式事务场景,出现如下问题:java.lang.ArrayIndexOutOfBoundsException: Index 0 out of bounds for length 0 查看服务端:java.util.ServiceCo…

鸿蒙开发Ability Kit(程序框架服务):【向用户申请授权】

向用户申请授权 当应用需要访问用户的隐私信息或使用系统能力时,例如获取位置信息、访问日历、使用相机拍摄照片或录制视频等,应该向用户请求授权,这部分权限是user_grant权限。 当应用申请user_grant权限时,需要完成以下步骤&a…

鸿蒙开发设备管理:【@ohos.multimodalInput.inputDevice (输入设备)】

输入设备 输入设备管理模块,用于监听输入设备连接、断开和变化,并查看输入设备相关信息。比如监听鼠标插拔,并获取鼠标的id、name和指针移动速度等信息。 说明: 本模块首批接口从API version 8开始支持。后续版本的新增接口&…

11_电子设计教程基础篇(磁性元件)

文章目录 前言一、电感1、原理2、种类1、制作工艺2、用途 3、参数1、测试条件2、电感量L3、品质因素Q4、直流电阻(DCR)5、额定电流6、谐振频率SRF(Self Resonant Frequency)7、磁芯损耗 4、应用与选型 二、共模电感1、原理2、参数…

RocketMQ常用基本操作

文章中的rabbitmq使用的是rocketmq-all-5.1.3-bin-release版本,需要安装包的可自行下载 RockerMQ启动停止命令 启动命令 nohup sh bin/mqnamesrv & nohup sh bin/mqbroker -n localhost:9876 --enable-proxy & 查看日志 tail -f ~/logs/rocketmqlogs/…

对话贾扬清:我创业这一年所看到的 AI

引言 在这次对话中,前阿里巴巴人工智能专家、现LIBRINAI创始人贾扬清分享了他在AI领域创业一年的见解和经历。作为一位从科学家转型为CEO的创业者,他探讨了AI计算、异构计算和云原生软件的结合带来的革命性变化,并讨论了LIBRINAI如何在激烈的…