ant centos环境下 编译没有将配置文件加载_Linux 下的动态库、静态库与环境变量...
最近这几天在处理集群软件的过程中,遇到各种各样的库和环境变量的问题,被虐的不清!趁此机会,整理了一下 Linux 下静态库、动态库(共享库)和环境变量的一些知识,与大家共享一下。
库的种类
Linux 下的库有两种:静态库 和 动态库(共享库)。
静态库的代码在编译过程中已经被载入可执行程序,因此生成的可执行程序体积较大。静态用 .a
为后缀, 例如:libhello.a
。
动态库(共享库)的代码是在可执行程序运行时才载入内存的,在编译过程中仅简单的引用,因此生成的可执行程序代码体积较小。动态库通常用 .so
为后缀, 例如:libhello.so
。
为了在同一系统中使用不同版本的库,可以在库文件名后加上版本号为后缀,例如:libhello.so.1.0
,由于程序连接默认以 .so
为文件后缀名。所以为了使用这些库,通常使用建立符号连接的方式。
库的环境变量
LIBRARY_PATH 环境变量:指定程序静态链接库文件搜索路径。
LD_LIBRARY_PATH 环境变量:指定程序动态链接库文件搜索路径。
库的搜索顺序
动态库链接时搜索路径的顺序:
编译目标代码时指定的动态库搜索路径;
环境变量 LD_LIBRARY_PATH 指定动态库搜索路径,它指定程序动态链接库文件搜索路径;
配置文件 /etc/ld.so.conf 中指定的动态库搜索路径;
默认的动态库搜索路径 /lib;
默认的动态库搜索路径 /usr/lib。
静态库链接时搜索路径的顺序:
ld 会去找
gcc
/g++
命令中的参数-L
;再找 gcc 的环境变量 LIBRARY_PATH,它指定程序静态链接库文件搜索路径;
再找默认库目录
/lib
,/usr/lib
,/usr/local/lib
,这是当初 compile gcc 时写在程序内的。
环境变量文件加载顺序
正常登录配置文件顺序加载过程,所谓正常登录指用户通过输入用户名和密码登录的状态。
在 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'
重新登录终端,可以看到各个环境变量文件的启动顺序:
当我们不正常启动(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/bashrc:bash 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 下的动态库、静态库与环境变量...相关推荐
- ant centos环境下 编译没有将配置文件加载_你可能忽略的macOS下brew安装nginx细节解读,干货
大家好,我是路程lucky,热爱开发.设计.学习.生活.爱捣鼓的web前后端工程师,为您带来原创文章,欢迎持续关注~ 今天我们聊一聊macOS下的brew安装nginx,本文重点关注的是安装的细节的解 ...
- Linux下编译、链接、加载运行C++ OpenCV的两种方式及常见问题的解决
Linux下编译.链接.加载运行C++ OpenCV的两种方式及常见问题的解决 在Linux下安装完OpenCV C++之后(还没有安装的读者请参考Ubuntu 18.04 安装OpenCV C++) ...
- Spring使用环境变量控制配置文件加载(转)
项目中需要用到很多配置文件,不同环境的配置文件是不一样的,因此如果只用一个配置文件,势必会造成配置文件混乱,这里提供一种利用环境变量控制配置文件加载的方法,如下: 一.配置环境变量 如果是window ...
- 使用MJRefresh自定义下拉刷新,上拉加载动画
有时候我们需要自己设置下拉刷新,上拉加载动画的实现,这里主要是记录下使用MJRefresh自定义下拉刷新,上拉加载动画..... 下拉刷新我们只需要继承MJRefreshGifHeader即可: 实现 ...
- Android下拉刷新和上拉加载更多
Android下拉刷新和上拉加载更多 下拉刷新 通过android系统提供的组件:SwipeRefreshLayout 一.基本使用 1 xml中 添加 SwipeRefreshLayout 组件 该 ...
- springboot配置文件加载顺序_「SpringBoot系列」配置文件加载优先级解析
SpringBoot提供了外部分配置功能,可以使用属性文件(properties).YAML(yml)文件.环境变量和命令行参数来进行处部参数配置,并t以特定的顺序来处理配置,以便于允许合理的覆盖值. ...
- 使用IDEA+maven配置SSM项目步骤,以及配置项目过程中遇到的各种坑(SSM配置文件加载问题,使用注解开发问题,maven开发SSM项目步骤)
问题概览 1. 更改springmvc配置文件的默认位置,但是"classpath:文件路径",路径明明正确,但是就是识别不到,idea报找不到配置文件的错误. 2. 使用myba ...
- VS2015编译32位Opencv310(动态库+静态库,文末有下载链接)
VS2015编译32位Opencv310(动态库+静态库 编译过得,可以直接用的: http://download.csdn.net/download/longzaihuaxia/9802510 之前 ...
- 33-viper 配置文件加载
配置文件加载: 主流的配置文件格式:toml.yaml.json.xml.ini(conf.properties) 配置的来源:文本文件.环境变量.配置中心(携程开源的apollo配置中心.nacos ...
- Golang toml配置文件加载方法
一.toml 配置文件加载方法 Golang可以通过加载toml文件的方式,减少代码移植或环境变更时对代码的修改量. 有这样一份toml文件: 我们需要定义一个结构体类型(Config)来映射配置文件 ...
最新文章
- 深扒:一个司机如何潜入机房偷数据…
- Science-2018-微生物群落的构建过程具有趋简性
- MyBatis 实践 -配置
- python多个异常处理_python中处理多个异常
- Java 之 JavaScript (一)
- 编写JQuery插件-2
- 《CLIP2Video》-腾讯PCG提出CLIP2Video,基于CLIP解决视频文本检索问题,性能SOTA!代码已开源!...
- 洛谷 P3396 哈希冲突 解题报告
- Sklearn环境搭建与常用包
- 学习完windows网络编程第一章后做的UDPTest程序
- 【渝粤教育】电大中专跨境电子商务理论与实务 (8)作业 题库
- colorkey唇釉是否安全_colorkey小黑镜唇釉好用吗
- flex sdk中mx_internal function getTextField() 这种函数如何调用?
- cc2530单片机的内核是什么_ZigBee技术开发:CC2530单片机原理及应用
- line划线计算机图像学,《计算机图形学基础》OpenGL中点画线法画直线(同时支持k1和k1的情况)...
- Mac 苹果电脑创建一个新的管理员账号
- leetcode: 每个元音包含偶数次的最长字符串(前缀和 + 状态压缩(位运算、hash优化))*
- 10KV空压机继电保护定值设定
- Markdown 表情包大全
- mysql数据推荐算法_Java+Mysql实现简单在线电影、音乐、图书推荐系统 基于用户的协同过滤推荐算法实现 源代码下载...