目录

  • 前言
  • 1 路径相关的环境变量
  • 1.1 PATH
  • 1.2 *_INCLUDE_PATH
  • 1.3 LIBRARY_PATH
  • 1.4 LD_LIBRARY_PATH
  • 参考文献


前言

本文用于总结linux中常用的环境变量,用于备忘。文中内容来源于网络,所有参考文章均会在文末列出,内容会不断更新。

1 路径相关的环境变量

1.1 PATH

记录可执行文件的路径,比如我们通过shell执行命令时,shell就会在PATH记录的一系列路径下寻找命令对应的可执行文件。

1.2 *_INCLUDE_PATH

这类环境变量通常会被GCC使用,用来记录一系列头文件目录,GCC搜索头文件时,回去这些目录查找:

  • C_INCLUDE_PATH:记录C语言的头文件目录;
  • CPLUS_INCLUDE_PATH:记录CPP的头文件目录;
  • OBJC_INCLUDE_PATH:记录OC的头文件目录。

补充说明——GCC搜索头文件的优先顺序

  1. 当前目录(如果使用了""包含头文件);
  2. 编译选项中-I指定的目录;
  3. 环境变量*_INCLUDE_PATH记录的一系列头文件目录;
  4. GCC预设的头文件目录,如不使用-nostdinc选项,则这些预设的目录总是会被搜索,因此放在最后。上文所谓预设的头文件目录在GCC手册中被称为standard system directories for header files,通常是/usr/include/usr/local/include/usr/lib/gcc/x86_64-linux-gnu/4.8/include等。

1.3 LIBRARY_PATH

记录一系列的库文件目录(动态/静态),在程序的编译链接期间,GCC搜索-l选项指定的库文件时,会在该环境变量记录的目录中搜索。


补充说明——GCC搜索库文件的优先顺序

  1. -L选项指定的目录;
  2. 环境变量LIBRARY_PATH记录的一系列库文件目录;
  3. GCC预设的库文件目录,通常是/lib/usr/lib/usr/local/lib等。

1.4 LD_LIBRARY_PATH

记录一系列的动态库目录,在程序的加载运行期间,动态链接/加载器(ld-linux.so.2)搜索并加载程序依赖的动态库时,会在该环境变量记录的目录中搜索。


补充说明——动态链接/加载器搜索动态库的优先顺序

  1. 编译链接时指定的动态库搜索路径。具体的,通过GCC的编译选项-Wl,-rpath=dir1:dir2可以把动态库搜索路径dir1dir2添加到可执行文件中。同时,该选项也有在编译链接时使链接器搜索其指定目录的作用。要注意该选项与-L选项的区别,-L选项用于编译链接时添加库文件的搜索路径;而该选项仅限于动态库,既可以在编译链接时添加搜索路径,同时也能将搜索路径添加到可执行文件中以便加载运行时使用;
  2. 环境变量LD_LIBRARY_PATH指定的动态库搜索路径;
  3. 配置文件/etc/ld.so.conf中指定的动态库搜索路径。需要说明的是,通过修改该配置文件来添加搜索目录时,须在修改后运行ldconfig命令以刷新缓存文件/etc/ld.so.cache,进而使修改后的配置生效;
  4. 默认的动态库搜索路径/lib
  5. 默认的动态库搜索路径/usr/lib