5.15 vs2019 静态编译_Linux 下的动态库、静态库与环境变量

ff147a534fe46e68ff79944f91709ae3.png

最近这几天在处理集群软件的过程中,遇到各种各样的库和环境变量的问题,被虐的不清!趁此机会,整理了一下 Linux 下静态库、动态库(共享库)和环境变量的一些知识,与大家共享一下。

库的种类

Linux 下的库有两种:静态库 和 动态库(共享库)。

静态库的代码在编译过程中已经被载入可执行程序,因此生成的可执行程序体积较大。静态用 .a 为后缀, 例如:libhello.a 。

动态库(共享库)的代码是在可执行程序运行时才载入内存的,在编译过程中仅简单的引用,因此生成的可执行程序代码体积较小。动态库通常用 .so 为后缀, 例如:libhello.so 。

为了在同一系统中使用不同版本的库,可以在库文件名后加上版本号为后缀,例如:libhello.so.1.0 ,由于程序连接默认以 .so 为文件后缀名。所以为了使用这些库,通常使用建立符号连接的方式。

库的环境变量

LIBRARY_PATH 环境变量:指定程序静态链接库文件搜索路径。

LD_LIBRARY_PATH 环境变量:指定程序动态链接库文件搜索路径。

库的搜索顺序

动态库链接时搜索路径的顺序:

  1. 编译目标代码时指定的动态库搜索路径;

  2. 环境变量 LD_LIBRARY_PATH 指定动态库搜索路径,它指定程序动态链接库文件搜索路径;

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

  4. 默认的动态库搜索路径 /lib

  5. 默认的动态库搜索路径 /usr/lib

静态库链接时搜索路径的顺序:

  1. ld 会去找 gcc / g++  命令中的参数 -L ;

  2. 再找 gcc 的环境变量 LIBRARY_PATH,它指定程序静态链接库文件搜索路径;

  3. 再找默认库目录 /lib , /usr/lib , /usr/local/lib ,这是当初 compile gcc 时写在程序内的。

环境变量文件加载顺序

正常登录配置文件顺序加载过程,所谓正常登录指用户通过输入用户名和密码登录的状态。

6141529926b90ee3ee3da33166c4814f.png
CentOS 正常登陆,配置文件加载顺序
在 CentOS 7,我们测试一下:
# /etc/profile
重新登录终端,可以看到各个环境变量文件的启动顺序:
88267109c3861b8be6da145ca119525f.png
Cent OS  正常登陆, 配置文件加载结果

当我们不正常启动(su 命令切换用户),环境变量文件加载顺序如下:

32b3cb773f06bb8a901ae3d5b308b362.png
Cent OS 使用 su 切换用户 登陆, 配置文件加载 顺序
b7f33a83393df12351ec6e33af636a52.png
Cent OS 使用 su 切换用户 登陆, 配置文件加载结果

常用的环境变量

我们可以使用 env 命令查看当前用户的所有环境变量设置:

$ env
MANPATH=/usr/local/software/texlive/2018/texmf-dist/doc/man:/usr/local/auto-devops/ansible/docs/man:
XDG_SESSION_ID=61
HOSTNAME=ecs-steven
TERM=xterm
SHELL=/bin/bash
HISTSIZE=3000
......
LESSOPEN=||/usr/bin/lesspipe.sh %s
INFOPATH=/usr/local/software/texlive/2018/texmf-dist/doc/info:
XDG_RUNTIME_DIR=/run/user/1000
DISPLAY=localhost:16.0
HISTTIMEFORMAT=%F %T
_=/usr/bin/env

用户环境变量常用设置方法

系统级别设置

  • /etc/profile全局的系统环境变量设置。适用于多个 shell,比如 bash, sh, zsh 之类。

  • /etc/bashrcbash shell 全局环境变量。

用户级别设置

  • ~/.bashrc包含专用于当前用户 bash shell 的 bash 信息,当登录时以及每次打开新的 shell 时,该文件被读取。每开一个 shell,这个文件会读取一次。
  • ~/.bash_profile每个用户都可使用该文件输入专用于自己使用的 shell 信息,当用户使用 login shell 模式登陆时,该文件仅仅执行一次。

用户临时(当前 shell 对话框)环境变量设置

export 命令:用于 /bin/bash shell 类型

示例

# User Specific Alias

——The  End——

25ac436cf3f701920525be605be984f9.gif

欢迎关注生信人

TCGA | 小工具 | 数据库 |组装| 注释 |   基因家族  |  Pvalue

基因预测  |bestorf |  sci | NAR | 在线工具 | 生存分析 | 热图

 生信不死 | 初学者 | circRNA | 一箭画心| 十二生肖 | circos

 舞台|基因组 | 黄金测序 | 套路 | 杂谈组装 |  进化 | 测序简史

7668fb962ce38ca18e6dce225c040236.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值