GCC相关的环境变量
介绍GCC在编译阶段和程序运行阶段用到的环境变量。
GCC编译时用到的环境变量
GCC编译时用到的变量。
C_INCLUDE_PATH
GCC编译时查找头文件的目录列表。比如:
echo $C_INCLUDE_PATH
# outputs
## /usr/include:/usr/local/include
CPLUS_INCLUDE_PATH
类似C_INCLUDE_PATH,适用于g++。
LIBRARY_PATH
gcc和g++在编译的链接(link)阶段查找库文件的目录列表,比如:
echo $LIBRARY_PATH
# outputs
## /usr/lib:/usr/lib64:/usr/local/lib:/usr/local/lib64
程序运行时用到的环境变量
程序运行阶段用到的变量。
LD_LIBRARY_PATH
程序运行时查找动态链接库(.so文件)的目录列表。比如:
echo $LD_LIBRARY_PATH
# outputs
## /usr/lib:/usr/lib64:/usr/local/lib:/usr/local/lib64
LD_PRELOAD
在LD_PRELOAD(参考man ld.so的LD_PRELOAD部分)中定义的动态链接库会在其他动态链接库之前被加载,因此会覆盖其他链接库里定义的同名符号(函数变量等),完整的例子可参考test-ld-preload。需要注意的是,在C++中覆盖C函数库中的函数时,应使用extern "C"阻止Name Mangling。
su
LD_PRELOAD=/usr/lib/libtsocks.so apt-get update
注意,LD_PRELOAD无法在sudo命令里使用。1
Debian动态链接库搜索路径
Debian系统上,如果修改LD_LIBRARY_PATH没有用,可修改/etc/ld.so.conf或/etc/ld.so.conf.d/*.conf,将库目录作为一行加入以上的conf文件中,然后运行ldconfig命令即可。
vi /etc/ld.so.conf.d/my.conf
ldconfig
或者自定义一个库目录的配置文件(例如my.conf),然后用ldconfig -f /path/to/my.conf加载该配置文件。
vi ~/project/test/ld_lib.conf
ldconfig -f ~/project/test/ld_lib.conf
ld_lib.conf的例子。
/usr/local/lib
/path/to/your/shared/lib/directory
ld.so查找库文件的顺序
ld.so用于查找并加载动态链接库文件(*.so),详情可参考man ld.so。
ld.so loads the shared libraries needed by a program, prepares the program to run, and then runs it. Unless explicitly specified via the -static option to ld dur? ing compilation, all Linux programs are incomplete and require further linking at run time.
The necessary shared libraries needed by the program are searched for in the following order o Using the environment variable LD_LIBRARY_PATH (LD_AOUT_LIBRARY_PATH for a.out programs). Except if the executable is a setuid/setgid binary, in which case it is ignored. o From the cache file /etc/ld.so.cache which contains a compiled list of candidate libraries previously found in the augmented library path. o In the default path /lib, and then /usr/lib.
对于/etc/ld.so.conf.d/里的conf文件,则是按字母序依次加载。假设需要使用/usr/local/lib目录下的库文件覆盖系统的库文件,可以把包含/usr/local/lib的配置文件排地靠前一些。
$ ls -1 /etc/ld.so.conf.d
00_libc.conf
x86_64-linux-gnu.conf
zz_i386-biarch-compat.conf $ cat 00_libc.conf
/usr/local/lib
阅读资料
GCC相关的环境变量的更多相关文章
- 系统区域设置 本地语言的支持依赖于 /etc/locale.conf,/etc/locale.conf 包含不少于此相关的环境变量
https://linux.cn/lfs/LFS-BOOK-7.7-systemd/chapter07/locale.html 7.7. 系统区域设置 本地语言的支持依赖于 /etc/locale.c ...
- Linux设置:环境变量
一.在相关配置文件中添加可执行文件/头文件/静态库/动态库的搜索路径 对所有用户有效在/etc/profile添加. 只对当前用户有效在Home目录下的.bashrc或.bash_profile里添加 ...
- [转载]GCC 编译使用动态链接库和静态链接库--及先后顺序----及环境变量设置总结
来自http://blog.csdn.net/benpaobagzb/article/details/51364005 GCC 编译使用动态链接库和静态链接库 1 库的分类 根据链接时期的不同,库又有 ...
- linux环境变量配置总结
LD_LIBRARY_PATH: 动态库的查找路径设置:方法一: export LD_LIBRARY_PATH=LD_LIBRARY_PATH:/XXX 但是登出后就失效方法二: 修改~/.bash ...
- (大数据工程师学习路径)第一步 Linux 基础入门----环境变量与文件查找
环境变量与文件查找 本节介绍环境变量的作用与用法,及几种搜索文件的方法.学会这些技巧高效地使用 Linux. 一.环境变量 1.变量 要解释环境变量,得先明白变量是什么,准确的说应该是 Shell 变 ...
- linux的环境变量与文件查找
1. 环境变量 1.1 变量 shell 中的变量有不同类型,可参与运算,有作用域限定 变量的作用域即变量的有效范围(比如一个函数中.一个源文件中或者全局范围),在该范围内只能有一个同名变量.一旦离开 ...
- Linux环境变量及其设置
简介 环境变量是在操作系统中一个具有特定名字的对象,它包含了一个或多个应用程序将使用到的信息.Linux是一个多用户的操作系统,每个用户登录系统时都会有一个专用的运行环境,通常情况下每个用户的默认的环 ...
- linux环境变量 shell变量 command not found解决方法(转)
在Ubuntu.centos中有如下几个文件可以设置环境变量1./etc/profile:在登录时,操作系统定制用户环境时使用的第一个文件,此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文 ...
- Linux下设置环境变量
setenv(set environment variable) 功能说明:查询或显示环境变量. 语 法:setenv [变量名称][变量值] 补充说明:setenv为tsch中查询或设置环境变量的指 ...
随机推荐
- FTP原理和cent OS vsFTPd架设
1.ftp为明码传输 2.客户端和服务端采用两条链路来分别进行命令和数据的传输.数据传输的模式分为主动链接和被动链接. 3.客户端在需要数据的时候,会告知服务器端采取主动或者被动的方式来链接. 4.如 ...
- redis问题解决
一, redis的奇葩问题:我使用命令 redis-cli shutdown 关闭redis之后就再也灭洋启动了! 尝试1: 使用命令 sudo /etc/init.d/redis-server st ...
- Codeforces Round #204 (Div. 2): A
超级大水题: 只要用到一个小学用过的结论就可:能被9整除的数它的各位数相加能被9整除: 代码: #include<iostream> #define maxn 1005 using nam ...
- 安卓天天练练(五)CompoundButton
ToggleButton 让我想起了从前jQuery还没有取消toggle方法时是怎么偷懒的.. 注意: 如果LinearLayout,与RelativeLayout不同,必须有orientation ...
- Android系统的体系结构、开发语言及源码结构
整理自android系统体系结构 Android 是google公司针对手机开发的一个平台,并公布了其中大部分代码,其大部分应用程序都是用JAVA开发的,毕竟它是商业性的产品嘛,有所保留也是理所 当然 ...
- Keil工程文件的建立、设置与目标文件的获得
单片机开发中除必要的硬件外,同样离不开软件,我们写的汇编语言源程序要变为 CPU 可以执行的机器码有两种方法,一种是手工汇编,另一种是机器汇编,目前已极少使用手工 汇编的方法了.机器汇编是通过汇编软件 ...
- SCP和SFTP(都使用SSH。但SCP上传不能中断,而SFTP可以续传,这是最大区别)
不管SCP还是SFTP,都是SSH的功能之一.都是使用SSH协议来传输文件的. 不用说文件内容,就是登录时的用户信息都是经过SSH加密后才传输的,所以说SCP和SFTP实现了安全的文件传输. SCP和 ...
- Rectangle and Square(判断正方形、矩形)
http://acm.sdut.edu.cn:8080/vjudge/contest/view.action?cid=42#problem/D 改了N多次之后终于A了,一直在改判断正方形和矩形那,判断 ...
- bzoj3261
xor有一个很重要的性质就是A xor B xor B=A所以这道题求[l,r]中p,使a[p] xor a[p+1] xor ... xor a[N] xor x 最大就是=最大化a[1] xor ...
- Node.js权威指南 (4) - 模块与npm包管理工具
4.1 核心模块与文件模块 / 574.2 从模块外部访问模块内的成员 / 58 4.2.1 使用exports对象 / 58 4.2.2 将模块定义为类 / 58 4.2.3 为模块类定义类变量或类 ...