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

阅读资料

时间: 2024-11-10 22:35:02

GCC相关的环境变量的相关文章

gcc 添加include环境变量和lib环境变量(转载)

对所有用户有效在/etc/profile增加以下内容.只对当前用户有效在Home目录下的.bashrc或.bash_profile里增加下面的内容:(注意:等号前面不要加空格,否则可能出现 command not found) #在PATH中找到可执行文件程序的路径.export PATH =$PATH:$HOME/bin #gcc找到头文件的路径C_INCLUDE_PATH=/usr/include/libxml2:/MyLibexport C_INCLUDE_PATH #g++找到头文件的路

Windows下与Java相关的环境变量配置

准备工作 进入网址 Java 进入Java SE 下载Java SE 8u231 jre 下载Java SE 13.0.1 应该匹配你的计算机版本 等待安装,此时下载Eclipse Eclipse 进入界面,下载相应版本. 安装好jre之后,开始设置环境变量 将jdk-13下的bin文件夹路径添加至PATH eg.我的jdk-13安装在C:\Program Files\Java C:\Program Files\Java\jdk-13\bin 将jre下的bin文件夹路径添加至PATH eg.我

[转载]GCC 编译使用动态链接库和静态链接库--及先后顺序----及环境变量设置总结

来自http://blog.csdn.net/benpaobagzb/article/details/51364005 GCC 编译使用动态链接库和静态链接库 1 库的分类 根据链接时期的不同,库又有静态库和动态库之分. 静态库是在链接阶段被链接的(好像是废话,但事实就是这样),所以生成的可执行文件就不受库的影响了,即使库被删除了,程序依然可以成功运行. 有别于静态库,动态库的链接是在程序执行的时候被链接的.所以,即使程序编译完,库仍须保留在系统上,以供程序运行时调用.(TODO:链接动态库时链

GCC 编译使用动态链接库和静态链接库--及先后顺序----及环境变量设置总结

GCC 编译使用动态链接库和静态链接库 1 库的分类 根据链接时期的不同,库又有静态库和动态库之分. 静态库是在链接阶段被链接的(好像是废话,但事实就是这样),所以生成的可执行文件就不受库的影响了,即使库被删除了,程序依然可以成功运行. 有别于静态库,动态库的链接是在程序执行的时候被链接的.所以,即使程序编译完,库仍须保留在系统上,以供程序运行时调用.(TODO:链接动态库时链接阶段到底做了什么) 2 静态库和动态库的比较 链接静态库其实从某种意义上来说也是一种粘贴复制,只不过它操作的对象是目标

linux环境变量配置总结

LD_LIBRARY_PATH: 动态库的查找路径设置:方法一: export  LD_LIBRARY_PATH=LD_LIBRARY_PATH:/XXX 但是登出后就失效方法二: 修改~/.bashrc或~/.bash_profile或系统级别的/etc/profile         1. 在其中添加例如export PATH=/opt/ActiveP/lib:$LD_LIBRARY_PATH         2. source .bashrc  (Source命令也称为“点命令”,也就是一

理解环境变量

1.什么是环境变量? 由于linux是一个多用户的操作系统,所以每个用户都有自己的专用的运行环境.而这个环境有一组变量所定义,这组变量就是环境变量.用户可以对自己环境变量进行修改以达到环境的要求. 环境变量是和Shell紧密相关的,它是通过Shell命令来设置的. 环境变量又可以被所有当前用户所运行的程序所使用.对于bash来说,可以通过变量名来访问相应的环境变量.(shell) 2.linux中常见的环境变量 PATH:指定命令的搜索路径 [[email protected] /]$ echo

linux学习笔记入门之环境变量和文件查找

环境变量与文件查找 一.环境变量 1.变量 要解释环境变量,得先明白变量是什么,准确的说应该是 Shell 变量,所谓变量就是计算机中用于记录一个值(不一定是数值,也可以是字符或字符串)的符号,而这些符号将用于不同的运算处理中.通常变量与值是一对一的关系,可以通过表达式读取它的值赋值给其它变量,也可以直接指定数值赋值给任意变量.为了便于运算和处理,大部分的编程语言会区分变量的类型,用于分别记录数值.字符或者字符串等等数据类型.Shell 中的变量也基本如此,有不同类型(但不用专门指定类型名),可

linux环境变量与文件查找

整理来自 https://www.shiyanlou.com/courses/running/60 要解释环境变量,得先明白变量是什么,准确的说应该是 Shell 变量,所谓变量就是计算机中用于记录一个值(不一定是数值,也可以是字符或字符串)的符号,而这些符号将用于不同的运算处理中.通常变量与值是一对一的关系,可以通过表达式读取它的值赋值给其它变量,也可以直接指定数值赋值给任意变量.为了便于运算和处理,大部分的编程语言会区分变量的类型,用于分别记录数值.字符或者字符串等等数据类型.Shell 中

实验楼 环境变量与文件查找

一.环境变量 1. 变量 使用 declare 命令创建一个变量名为 tmp 的变量 declare tmp 使用 = 号赋值运算符,将变量 tmp 赋值为 shiyanlou tmp=shiyanlou 读取变量的值,使用 echo 命令和 $ 符号($ 符号用于表示引用一个变量的值,初学者经常忘记输入): echo $tmp 2. 环境变量 Shell 的环境变量作用于自身和它的子进程.在所有的 UNIX 和类 UNIX 系统中,每个进程都有其各自的环境变量设置,且默认情况下,当一个进程被创