最近这几天在处理集群软件的过程中,遇到各种各样的库和环境变量的问题,被虐的不清!趁此机会,整理了一下 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 时写在程序内的。

环境变量文件加载顺序

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

CentOS 正常登陆,配置文件加载顺序

在 CentOS 7,我们测试一下:

# /etc/profile$ sudo sed -i '1 iecho "/etc/profile goes start"\n' /etc/profile;head -n 3 /etc/profileecho "/etc/profile goes start"

# /etc/bashrc$ sudo sed -i '1 iecho "/etc/bashrc goes start"\n' /etc/bashrc;head -n 3 /etc/bashrcecho "/etc/bashrc goes start"

# .bash_profile$ sed -i '1 iecho "~/.bash_profile goes start"\n' ~/.bash_profile;head -n 3 ~/.bash_profileecho "~/.bash_profile goes start"

# .bashrc$ sed -i '1 iecho "~/.bashrc goes start"\n' ~/.bashrc;head -n 3 ~/.bashrcecho "~/.bashrc goes start"

$ sudo echo "echo '/etc/profile.d/test.sh goes'" >/etc/profile.d/test.sh;cat /etc/profile.d/test.shecho '/etc/profile.d/test.sh goes'

重新登录终端,可以看到各个环境变量文件的启动顺序:

CentOS 正常登陆,配置文件加载结果

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

CentOS 使用 su 切换用户登陆,配置文件加载顺序

CentOS 使用 su 切换用户登陆,配置文件加载结果

常用的环境变量

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

$ envMANPATH=/usr/local/software/texlive/2018/texmf-dist/doc/man:/usr/local/auto-devops/ansible/docs/man:XDG_SESSION_ID=61HOSTNAME=ecs-stevenTERM=xtermSHELL=/bin/bashHISTSIZE=3000......LESSOPEN=||/usr/bin/lesspipe.sh %sINFOPATH=/usr/local/software/texlive/2018/texmf-dist/doc/info:XDG_RUNTIME_DIR=/run/user/1000DISPLAY=localhost:16.0HISTTIMEFORMAT=%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 Aliasalias ll='ls -lht'alias le='less -S'

# Custom History settingHISTFILESIZE=3000000HISTSIZE=3000export HISTTIMEFORMAT='%F %T 'HISTCONTROL=ignoredupsPROMPT_COMMAND="history -a“# Login StylePS1='\033[35;1m\u@\h \[\e[m\]\t \[\033[36;1m\]$(pwd) \n$ \[\e[m\]'clear;# Shortcut Commandsbcl_fq='/Bioinfo/Project/BCL_fastq‘# Custom PathANACONDA2_PATH='/Bioinfo/Pipeline/SoftWare/Anaconda2/bin'PERL_PATH='/Bioinfo/Pipeline/SoftWare/Perl-5.26/bin‘export PATH="$ANACONDA2_PATH:$ANACONDA3_PATH:$hdf5_PATH:$PERL_PATH:$PATH"export LD_LIBRARY_PATH="……: $LD_LIBRARY_PATH"export PYTHONPATH="……: $PYTHONPATH"

——The  End——

欢迎关注生信人

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

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

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

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

ant centos环境下 编译没有将配置文件加载_Linux 下的动态库、静态库与环境变量...相关推荐

  1. ant centos环境下 编译没有将配置文件加载_你可能忽略的macOS下brew安装nginx细节解读,干货

    大家好,我是路程lucky,热爱开发.设计.学习.生活.爱捣鼓的web前后端工程师,为您带来原创文章,欢迎持续关注~ 今天我们聊一聊macOS下的brew安装nginx,本文重点关注的是安装的细节的解 ...

  2. Linux下编译、链接、加载运行C++ OpenCV的两种方式及常见问题的解决

    Linux下编译.链接.加载运行C++ OpenCV的两种方式及常见问题的解决 在Linux下安装完OpenCV C++之后(还没有安装的读者请参考Ubuntu 18.04 安装OpenCV C++) ...

  3. Spring使用环境变量控制配置文件加载(转)

    项目中需要用到很多配置文件,不同环境的配置文件是不一样的,因此如果只用一个配置文件,势必会造成配置文件混乱,这里提供一种利用环境变量控制配置文件加载的方法,如下: 一.配置环境变量 如果是window ...

  4. 使用MJRefresh自定义下拉刷新,上拉加载动画

    有时候我们需要自己设置下拉刷新,上拉加载动画的实现,这里主要是记录下使用MJRefresh自定义下拉刷新,上拉加载动画..... 下拉刷新我们只需要继承MJRefreshGifHeader即可: 实现 ...

  5. Android下拉刷新和上拉加载更多

    Android下拉刷新和上拉加载更多 下拉刷新 通过android系统提供的组件:SwipeRefreshLayout 一.基本使用 1 xml中 添加 SwipeRefreshLayout 组件 该 ...

  6. springboot配置文件加载顺序_「SpringBoot系列」配置文件加载优先级解析

    SpringBoot提供了外部分配置功能,可以使用属性文件(properties).YAML(yml)文件.环境变量和命令行参数来进行处部参数配置,并t以特定的顺序来处理配置,以便于允许合理的覆盖值. ...

  7. 使用IDEA+maven配置SSM项目步骤,以及配置项目过程中遇到的各种坑(SSM配置文件加载问题,使用注解开发问题,maven开发SSM项目步骤)

    问题概览 1. 更改springmvc配置文件的默认位置,但是"classpath:文件路径",路径明明正确,但是就是识别不到,idea报找不到配置文件的错误. 2. 使用myba ...

  8. VS2015编译32位Opencv310(动态库+静态库,文末有下载链接)

    VS2015编译32位Opencv310(动态库+静态库 编译过得,可以直接用的: http://download.csdn.net/download/longzaihuaxia/9802510 之前 ...

  9. 33-viper 配置文件加载

    配置文件加载: 主流的配置文件格式:toml.yaml.json.xml.ini(conf.properties) 配置的来源:文本文件.环境变量.配置中心(携程开源的apollo配置中心.nacos ...

  10. Golang toml配置文件加载方法

    一.toml 配置文件加载方法 Golang可以通过加载toml文件的方式,减少代码移植或环境变更时对代码的修改量. 有这样一份toml文件: 我们需要定义一个结构体类型(Config)来映射配置文件 ...

最新文章

  1. 深扒:一个司机如何潜入机房偷数据…
  2. Science-2018-微生物群落的构建过程具有趋简性
  3. MyBatis 实践 -配置
  4. python多个异常处理_python中处理多个异常
  5. Java 之 JavaScript (一)
  6. 编写JQuery插件-2
  7. 《CLIP2Video》-腾讯PCG提出CLIP2Video,基于CLIP解决视频文本检索问题,性能SOTA!代码已开源!...
  8. 洛谷 P3396 哈希冲突 解题报告
  9. Sklearn环境搭建与常用包
  10. 学习完windows网络编程第一章后做的UDPTest程序
  11. 【渝粤教育】电大中专跨境电子商务理论与实务 (8)作业 题库
  12. colorkey唇釉是否安全_colorkey小黑镜唇釉好用吗
  13. flex sdk中mx_internal function getTextField() 这种函数如何调用?
  14. cc2530单片机的内核是什么_ZigBee技术开发:CC2530单片机原理及应用
  15. line划线计算机图像学,《计算机图形学基础》OpenGL中点画线法画直线(同时支持k1和k1的情况)...
  16. Mac 苹果电脑创建一个新的管理员账号
  17. leetcode: 每个元音包含偶数次的最长字符串(前缀和 + 状态压缩(位运算、hash优化))*
  18. 10KV空压机继电保护定值设定
  19. Markdown 表情包大全
  20. mysql数据推荐算法_Java+Mysql实现简单在线电影、音乐、图书推荐系统 基于用户的协同过滤推荐算法实现 源代码下载...

热门文章

  1. uva 10825 - Anagram and Multiplication(暴力)
  2. 消息队列中间件的技术选型分析
  3. Android系统在新进程中启动自定义服务过程(startService)的原理分析
  4. Finite State Transducers 详解
  5. ArcGIS相关学习视频链接
  6. icesat/glas与SRTM参考椭球、基准对比
  7. 【ArcGIS|空间分析|网络分析】5 计算服务区和创建 OD 成本矩阵
  8. java二叉树的遍历,递归与非递归方法
  9. Flutter之EdgeInsetsGeometry简析
  10. Flutter实战之Dio入门使用