Linux环境变量之LD:动态链接库的重要组成部分 (linux 环境变量 ld)

在Linux操作系统中,环境变量是一个非常重要的概念。它们是操作系统在运行过程中使用的一些特殊变量,它们用于存储一些特殊的数据,例如系统路径、程序调用参数等等。其中一个非常重要的环境变量是LD_LIBRARY_PATH,它用于指定程序运行时所依赖的动态链接库的路径。在本文中,我们将讨论LD环境变量的作用和使用方法。

什么是动态链接库?

动态链接库是一种特殊的程序库,它包含一些可重用的代码和数据,可供不同的程序使用。使用动态链接库的程序将链接到这个库,从而使用其中的代码和数据。相对于静态链接库,动态链接库的更大好处在于它可以减少程序的内存占用和磁盘空间占用。这是因为不同的程序可以共享同一个动态链接库,并且不同版本的动态链接库可以被系统自由地管理。

在Linux系统中,动态链接库文件通常以.so结尾。例如,libc.so是一个系统标准库,它包含所有标准C函数的定义。当我们编译一个程序时,编译器会自动链接libc库,从而使我们的程序可以使用这些函数。

LD_LIBRARY_PATH环境变量的作用

LD_LIBRARY_PATH环境变量用于指定程序运行时所依赖的动态链接库的路径。当程序需要使用一个动态链接库时,它将在LD_LIBRARY_PATH中指定的路径中搜索这个库。如果找到了这个库,程序将会加载它,从而可以使用其中的函数和数据。

LD_LIBRARY_PATH环境变量的使用方法

使用LD_LIBRARY_PATH环境变量很简单。我们只需要将所需的动态链接库的路径添加到LD_LIBRARY_PATH环境变量中即可。例如,假设我们的程序需要使用mylib.so这个动态链接库,而这个库在/home/usr/lib中,我们可以这样设置LD_LIBRARY_PATH环境变量:

export LD_LIBRARY_PATH=/home/usr/lib

然后,我们就可以运行我们的程序了。程序将会在LD_LIBRARY_PATH中搜索mylib.so,如果找到了这个库,程序就会加载它,并使用其中的函数和数据。

需要注意的是,由于LD_LIBRARY_PATH是一个环境变量,它只在当前的shell会话中有效。如果我们需要在不同的终端或会话中使用相同的动态链接库路径,我们需要在每一个会话中都设置LD_LIBRARY_PATH环境变量。

在Linux操作系统中,动态链接库是一种非常重要的组成部分。使用动态链接库可以大大减少程序的内存占用和磁盘空间占用。使用LD_LIBRARY_PATH环境变量可以指定程序运行时所依赖的动态链接库的路径,从而使程序可以正确地加载库并使用其中的函数和数据。在使用LD_LIBRARY_PATH时,需要注意设置环境变量的有效范围。

相关问题拓展阅读:

linux编译的c++程序位置

linux系统编神差孙译C++程序时头⽂件和库⽂件搜索路径

C++编译时,教科书中写道:#include “headfile.h”优先在当前⽬录查找头⽂件;#include 从系统默认路径查找头⽂件。先

前以为系统默认路径是环境变量$PATH指定的路径,在系统上⼀查,傻了眼:

-bash-3.2$ echo$PATH

/usr/local/bin:/bin:/usr/bin:/in:/usr/in:/usr/X11R6/bin:/usr/java/j2re1.4.0/bin:/usr/atria/bin:/ccase/bin:/home/devcomp

全是bin⽬录,$PATH是运⾏可执⾏⽂件时的搜索路径,与include头⽂件的搜索路径⽆关,可能不少⼈犯了我这样的错误。

头⽂件:

1. #include“headfile.h”

搜索顺序为:

①先搜索当前⽬录

②然后搜索-I指定的⽬录

③再搜索gcc的环境变量CPLUS_INCLUDE_PATH(C程序使⽤的是C_INCLUDE_PATH)

④最后搜索gcc的内定⽬录

/usr/include

/usr/local/include

/usr/lib/gcc/x86_64-redhat-linux/4.1.1/include

各⽬录存在相同⽂件时,先找到哪个使⽤哪个。

2. #include

①先搜索-I指定的⽬录

②然后搜索gcc的环境变量CPLUS_INCLUDE_PATH

③最后搜索gcc的内定⽬录

/usr/include

/usr/local/include

/usr/lib/gcc/x86_64-redhat-linux/4.1.1/include

与上⾯的相同,各⽬录存在相同⽂件时,先找到哪个使⽤哪游链个。这⾥要注意,#include⽅式不会搜索当前⽬录!

这⾥要说下include的内定⽬录,它不是由$PATH环境变量指定的,⽽是由g++的配置prefix指定的(知道它在安装g++时可以指定,不知安

装后如何修改的,可能是修改配置⽂件,需要时再研究下):

-bash-3.2$ g++ -v

Using built-inspecs.

Target:x86_64-redhat-linux

Configured with:../configure –prefix=/usr –mandir=/usr/share/man–infodir=/usr/share/info –enable-shared –enable-threads=posix–enable-checking=release –with-system-zlib –enable-__cxa_atexit–disable-libunwind-exceptions –enable-libgcj-multifile–enable-languages=c,c++,objc,obj-c++,java,fortran,ada–enable-java-awt=gtk –disable-dssi –enable-plugin–with-java-home=/usr/lib/jvm/java-1.4.2-gcj-1.4.2.0/jre–with-cpu=generic –host=x86_64-redhat-linux

Thread model:posix

gcc version 4.1.(Red Hat 4.1.2-46)

在安装g++时,指定了prefix,那么内定搜索⽬录就是:

Prefix/include

Prefix/local/include

Prefix/lib/gcc/–host/–version/include

编译时可以通过-nostdinc++选项屏蔽对内定⽬录搜索头⽂件。

库⽂件:

编译的时候:

①gcc会去找-L

②再找gcc的环境变量LIBRARY_PATH

③再找内定⽬录/lib /usr/lib/usr/local/lib 这是当初compilegcc时写在程序内的(不可配置的?)

运⾏时动态库的搜索路径:

动态库的搜索路径搜索的先后顺序是:

①编译⽬标代码时指定的动态库搜索路径(庆迹这是通过gcc 的参数”-Wl,-rpath,”指定。当指定多个动态库搜索路径时,路径之间⽤冒号”:”分隔)

②环境变量LD_LIBRARY_PATH指定的动态库搜索路径(当通过该环境变量指定多个动态库搜索路径时,路径之间⽤冒号”:”分隔)

③配置⽂件/etc/ld.so.conf中指定的动态库搜索路径;

④默认的动态库搜索路径/lib;

⑤默认的动态库搜索路径/usr/lib。

(应注意动态库搜寻路径并不包括当前⽂件夹,所以当即使可执⾏⽂件和其所需的so⽂件在同⼀⽂件夹,也会出现找不到so的问题,类同#include不搜索当前⽬录)

百度文库VIP限时优惠现在开通,立享6亿+VIP内容

立即获取

linux系统编译C++程序时头文件和库文件搜索路径

linux系统编译C++程序时头⽂件和库⽂件搜索路径

C++编译时,教科书中写道:#include “headfile.h”优先在当前⽬录查找头⽂件;#include 从系统默认路径查找头⽂件。先

前以为系统默认路径是环境变量$PATH指定的路径,在系统上⼀查,傻了眼:

-bash-3.2$ echo$PATH

/usr/local/bin:/bin:/usr/bin:/in:/usr/in:/usr/X11R6/bin:/usr/java/j2re1.4.0/bin:/usr/atria/bin:/ccase/bin:/home/devcomp

第 1 页

全是bin⽬录,$PATH是运⾏可执⾏⽂件时的搜索路径,与include头⽂件的搜索路径⽆关,可能不少⼈犯了我这样的错误。

头⽂件:

1. #include“headfile.h”

搜索顺序为:

①先搜索当前⽬录

②然后搜索-I指定的⽬录

③再搜索gcc的环境变量CPLUS_INCLUDE_PATH(C程序使⽤的是C_INCLUDE_PATH)

展开全文

限免

导长图

转存到网盘

发送至微信

下载文档

北京百度网讯科技有限公司 版本号8.0.70

linux环境变量怎么配置

网口、USB、SD、JTAG。很多种方式 就看你的开发板支持哪一种纯首卜烧写方式了。 再就是做穗设置芹亮好启动参数。

linux环境变量配置相关命令及例程:

1. 显示环境变量HOME

  $ echo $HOME

  /home/redbooks

2. 设置一个新的环境变量hello

  $ export HELLO=”Hello!”

  $ echo $HELLO

  Hello!

3. 使用env命令显示所有的环境变量

  $ env

  HOSTNAME=redbooks.safe.org

  PVM_RSH=/usr/bin/rsh

  Shell=/bin/bash

  TERM=xterm

  HISTSIZE=1000

  …

4. 使用set命令显示所有本地定义的Shell变量

  $ set

  BASH=/bin/bash

  BASH_VERSINFO=(=”2″=”05b”=”0″=”1″=”release”=”i386-redhat-linux-gnu”)

  BASH_VERSION=’2.05b.0(1)-release’

  COLORS=/etc/DIR_COLORS.xterm

  COLUMNS=80

  凯轿DIRSTACK=()

  DISPLAY=:0.0

  …

5. 使用unset命令来清除环境变量

  set可以设置某个环境变量的值。清除环凳孙掘境变量的值用unset命令。如果未指定值,则该变量值将被设为NULL。示例如下:

  $ export TEST=”Test…” #增加一个环境变量TEST

  $ env|grep TEST #此命令有输入,证明环境变量TEST已经存在了

  TEST=Test…

  $ unset $TEST #删除环境变量TEST

  $ env|grep TEST #此命令没有输出,证明环境变量TEST已经存在了

6. 使用readonly命令设置只读变量

  如果使用了readonly命令的话,变量就不可以被修改或清除了。示例如下:

  $ export TEST=”Test…” #增加一个环境变量TEST

  $ readonly TEST #将环境变量TEST设为只读

  $ unset TEST #会发现此变量不能被删除

  -bash: unset: TEST: cannot unset: readonly variable

  $ TEST=”New” #会发现此也变量不能被修改

  -bash: TEST: readonly variable

  环境变量的设置位于/etc/profile文件

  如果需要增加新的环境变量可以添加下属行

  export path=$path:/path1:/path2:/pahtN

1.Linux的变量种类

按变量的生存周期来划分,Linux变量可分为两类:

永久的:需要修改配置文件,变量永久生效。

临时的:使用export命令声明即可,变量在关闭shell时失效。

2.设置变量的三种方法

在/etc/profile文件中添加变量【对所有用户生效(永久的)】

用VI在文件/etc/profile文件中增加变量,该变量将会对Linux下所有用户有效,并且是“永久的”。

例如:编辑/etc/profile文件,添加CLASSPATH变量

# vi /etc/profile

export CLASSPATH=./JAVA_HOME/lib;$JAVA_HOME/jre/lib

注:修改文件后要想马上生效还要运行# source /etc/profile不然只能在下次重进此用户时生效。

在用户目录下的.bash_profile文件中增加变量【对单一用户生效(永枣核久的)】

用VI在用户目录下的.bash_profile文件中增加变量,改变量仅会对当前用户有效,并且是“永久的”。

例如:编辑guok用户目录(/home/guok)下的.bash_profile

$ vi /home/guok/.bash.profile

添加如下内容:

export CLASSPATH=./JAVA_HOME/lib;$JAVA_HOME/jre/lib

注:修改文件后要想马上生效还要运行$ source /home/guok/.bash_profile不然只能在下次重进此用户时生效。

直接运行export命令定义变量【只对当前shell(BASH)有效(临时的)】

在shell的命令行下直接使用 定义变量,该变量只在当前的shell(BASH)或其子shell(BASH)下是有效的,shell关闭了,变量也就失效了,再打开新shell时就没有这个变量,需要使用的话还需要重新定义。

环境变量的查看

使用echo命令查看单个环境变量。例如:

  echo $PATH

使用env查看所有环境变量。例如:

  env

使用set查看所有本地定义的环境变量。

  unset可以删除指定的环境变量。

常用的环境变量

  PATH 决定了shell将到哪些目录中寻找命令或程序

  HOME 当前用户主目录

  HISTSIZE 历史记录数

  LOGNAME 当前用户的登录名

  HOSTNAME 指主机的名称

  SHELL   当前用户Shell类型

  LANGUGE  语言相关的环境变量,多语言可以修改此环境变量

  MAIL   当前用户的邮件存放目录

  PS1   基本提示符,对于root用户是#,对于普通用户是$

首先兄蔽册确认你使用的shell是bash还是csh

如果是bash的话,命令是set XX=XX

如果是羡宏csh的话,命令式setenv XX XX

linux怎样设置环境变量配置文件

linux设置环境变量方法:

1、打开linux终端命令窗口,输入如下命令段租:

export

path=$path:/usr/local/matlab/r2023b/握弊兆bin

为了验证是否修改成功可以再继续输入命令eport进行查看。在下图中可以看到成功添加了matlab的环境变量。

2、上面修改后如果退出终端并重新打开再次查看环境变量时就会发现上面添加的环境变量又消卜茄失了。

linux 环境变量 ld的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于linux 环境变量 ld,Linux环境变量之LD:动态链接库的重要组成部分,linux编译的c++程序位置,linux环境变量怎么配置,linux怎样设置环境变量配置文件的信息别忘了在本站进行查找喔。


数据运维技术 » Linux环境变量之LD:动态链接库的重要组成部分 (linux 环境变量 ld)