Linux环境变量简要介绍
在Linux系统中,环境变量是一种存储系统设置和配置信息的机制。它们包含了一些关键信息,如可执行文件的搜索路径、编译器选项、库文件路径等。环境变量对于定制系统行为、简化命令行操作以及在不同程序间共享配置信息等方面都非常有用。
环境变量是以“键=值”对的形式存储的,其中键是变量名,值是变量的内容。以下是一些常见的Linux环境变量及其用途:
PATH
:这个环境变量定义了系统在执行命令时搜索可执行文件的路径列表。当在命令行中输入一个命令时,系统会按照PATH
变量中指定的路径顺序查找可执行文件。HOME
:这个环境变量表示用户的主目录路径。大多数用户配置文件和个人数据文件都存储在这个目录下。USER
:这个环境变量表示当前登录用户的用户名。SHELL
:这个环境变量表示用户的默认Shell程序。常见的Shell程序有Bash、Zsh等。LD_LIBRARY_PATH
:这个环境变量指定了系统在运行时搜索共享库的路径。当您需要在非标准目录中安装库文件时,可以通过修改这个变量来确保系统能够正确地找到库文件。LANG
和LC_*
:这些环境变量用于配置系统的本地化设置,如语言、字符集、时间格式等。EDITOR
和VISUAL
:这些环境变量指定了用户的默认文本编辑器。当您需要在命令行中编辑文本文件时,系统会使用这些变量中指定的编辑器。TERM
:这个环境变量定义了终端模拟器的类型。它用于告诉应用程序如何与终端模拟器进行交互,以确保正确的显示和行为。PS1
:这个环境变量定义了Shell提示符的格式。您可以自定义这个变量以改变提示符的外观和包含的信息。TMPDIR
:这个环境变量指定了系统用于存储临时文件的目录。应用程序通常使用这个变量来确定在哪里创建临时文件。DISPLAY
:这个环境变量用于指定X Window系统中显示设备的名称。它允许您控制哪个显示设备应该用于图形界面应用程序。http_proxy
和https_proxy
:这些环境变量用于指定HTTP和HTTPS代理服务器的地址。当您需要通过代理服务器访问互联网时,可以设置这些变量以让应用程序知道如何连接到代理服务器。
要了解更多关于环境变量的信息,可以查阅相关文档和手册页,例如man 7 environ
。此外,您还可以查阅特定应用程序的文档以了解它们可能使用或需要设置的环境变量。
在Linux中,您可以使用export
命令来设置环境变量。例如,要将一个新路径添加到PATH
变量中,您可以执行以下命令:
export PATH="/new/path:$PATH"
要查看当前环境变量的值,您可以使用echo
命令,例如:
echo $PATH
要清除一个环境变量,您可以使用unset
命令,例如:
unset MY_VARIABLE
请注意,上述命令只会在当前Shell会话中修改环境变量。如果您想要永久地修改环境变量,需要将相应的export
命令添加到Shell的配置文件中,如~/.bashrc
(对于Bash)或~/.zshrc
(对于Zsh)。
总之,Linux环境变量是一种存储系统设置和配置信息的机制,可以用于定制系统行为、简化命令行操作以及在不同程序间共享配置信息。在Linux中,您可以使用export
、echo
和unset
命令来设置、查看和清除环境变量。
编译过程中重要的环境变量
# HuaWei LiteOS Linux, Cross-Toolchain PATH # Set PATH for HuaWei LiteOS Linux export PATH="/opt/hisi-linux/x86-arm/arm-himix200-linux/bin:$PATH" # Set PATH for GCC Linaro export PATH="/usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin:$PATH" # Set PATH for OpenSSL ARM libraries export PATH="/home/me/work/armlib/lib:$PATH" # Set LD_LIBRARY_PATH for OpenSSL ARM libraries export LD_LIBRARY_PATH="/home/me/work/armlib/lib:$LD_LIBRARY_PATH" # Set LIBRARY_PATH for OpenSSL ARM libraries export LIBRARY_PATH="/home/me/work/armlib/lib:$LIBRARY_PATH" # Set PKG_CONFIG path export PKG_CONFIG="/usr/bin/pkg-config" # Set PKG_CONFIG_LIBDIR for OpenSSL ARM libraries export PKG_CONFIG_LIBDIR="/home/me/work/armlib/lib/pkgconfig:$PKG_CONFIG_LIBDIR" # Set PKG_CONFIG_SYSROOT_DIR for HuaWei LiteOS Linux export PKG_CONFIG_SYSROOT_DIR="/opt/hisi-linux/x86-arm/arm-himix200-linux/target:$PKG_CONFIG_SYSROOT_DIR"
LD_LIBRARY_PATH
LD_LIBRARY_PATH
是一个环境变量,它用于指定动态链接器(dynamic linker)在运行时搜索动态库(shared libraries)的路径。当运行一个程序时,动态链接器负责加载程序所需的动态库,并将它们链接到程序中。在Linux系统中,动态链接器通常是ld.so
或ld-linux.so
。
LD_LIBRARY_PATH
中包含的目录会在系统默认的库路径(如/usr/lib
和/usr/local/lib
)之前被搜索。这对于在不修改系统库的情况下,为特定程序提供特定版本的库文件非常有用。例如,如果您有一个程序需要使用一个特定版本的动态库,而该版本与系统中安装的版本不同,您可以通过设置LD_LIBRARY_PATH
来确保程序在运行时链接到正确的库版本。
要设置LD_LIBRARY_PATH
,可以在命令行中使用export
命令:
export LD_LIBRARY_PATH="/path/to/your/library:$LD_LIBRARY_PATH"
这个命令将/path/to/your/library
添加到LD_LIBRARY_PATH
中,同时保留已有的路径。这样,动态链接器会优先搜索/path/to/your/library
目录中的动态库。
请注意,LD_LIBRARY_PATH
在某些情况下可能导致问题。例如,如果在该变量中添加了不兼容的库版本,可能会导致程序崩溃或出现其他错误。因此,在使用LD_LIBRARY_PATH
时,请确保了解您所设置的库文件的兼容性和正确性。
LIBRARY_PATH
LIBRARY_PATH
是一个环境变量,用于指定编译器在编译和链接阶段查找库文件(如静态库和动态库)时的搜索路径。当编译器需要链接库文件时,它会首先在LIBRARY_PATH
中指定的目录中查找所需的库,然后再搜索系统默认的库路径(如 /usr/lib
和 /usr/local/lib
等)。
LIBRARY_PATH
在编译和链接阶段起作用,主要用于以下场景:
- 当库文件安装在非系统默认路径的目录中时,可以通过设置
LIBRARY_PATH
来指定这些库的路径,以便编译器能够找到并链接它们。 - 当使用自定义编译的库或多个版本的库时,可以通过设置
LIBRARY_PATH
来确保编译器链接到正确的库版本。 - 当在开发过程中需要频繁切换不同版本或构建配置的库时,可以通过修改
LIBRARY_PATH
来实现。
需要注意的是,LIBRARY_PATH
仅在编译和链接阶段起作用。在运行时,动态链接器会使用其他环境变量(如 Linux 下的 LD_LIBRARY_PATH
或 Windows 下的 PATH
)来查找动态库。
PKG_CONFIG
环境变量
PKG_CONFIG
是一个用于管理编译和链接库的工具,它可以帮助开发者轻松地获取库的编译标志、链接标志以及相关信息。这些信息包括库的头文件路径、库文件路径、依赖库等。pkg-config
能够简化在构建过程中查找和使用库的过程,避免手动指定各种编译和链接选项。
pkg-config
工具通过读取.pc
文件(称为pkgconfig
文件)来获取库的相关信息。这些文件通常安装在系统的库目录下的pkgconfig
子目录中,例如:/usr/lib/pkgconfig
或/usr/local/lib/pkgconfig
。.pc
文件通常由库的开发者编写,并随库的安装包一起分发。
为了使用pkg-config
工具,您需要设置一些环境变量:
PKG_CONFIG_PATH
:指定pkg-config
在搜索.pc
文件时使用的额外目录。如果您的库安装在非标准目录中,您需要将该目录的pkgconfig
子目录添加到PKG_CONFIG_PATH
环境变量中。PKG_CONFIG_LIBDIR
:指定pkg-config
搜索.pc
文件的主要目录。您可以将自定义目录添加到此环境变量中以覆盖或扩展默认搜索路径。PKG_CONFIG_SYSROOT_DIR
:用于指定pkg-config
的根目录,主要用于交叉编译。设置此变量后,pkg-config
将在指定的目录下查找库文件和头文件。
使用pkg-config
工具时,可以在命令行中执行以下命令来获取特定库的信息:
pkg-config --cflags library-name
此命令将输出库的头文件路径,可用于编译过程中。
pkg-config --libs library-name
此命令将输出库的链接选项,可用于链接过程中。
例如,要获取GTK+库的编译和链接选项,可以执行:
pkg-config --cflags --libs gtk+-3.0
总之,pkg-config
是一个用于简化库管理的实用工具,它可以帮助开发者轻松地在构建过程中查找和使用库。在编译和链接库时,pkg-config
通过读取.pc
文件来提供相关信息,从而避免手动指定各种编译和链接选项。
其他可选变量
有些可以在命令行直接加,当然你也可以选择加在环境变量里
以下是一些可以设置的环境变量:
CC
和CXX
:这两个环境变量分别指定C和C++编译器的路径。在交叉编译时,您需要将它们设置为交叉编译工具链中的编译器,例如:
export CC="/path/to/cross-compiler-gcc" export CXX="/path/to/cross-compiler-g++"
AR
和RANLIB
:这两个环境变量分别指定静态库创建工具(archiver)和符号表生成工具(ranlib)。在交叉编译时,您需要将它们设置为交叉编译工具链中对应的工具,例如:
export AR="/path/to/cross-compiler-ar" export RANLIB="/path/to/cross-compiler-ranlib"
CPPFLAGS
和LDFLAGS
:这两个环境变量分别用于指定编译器的预处理选项和链接器的选项。在交叉编译过程中,您可能需要指定目标平台的头文件和库文件路径,例如:
export CPPFLAGS="-I/path/to/target/include" export LDFLAGS="-L/path/to/target/lib"
CFLAGS
和CXXFLAGS
:这两个环境变量分别用于指定C和C++编译器的编译选项。在交叉编译时,您可能需要为目标平台指定特定的编译选项,例如优化级别、架构和指令集等。
export CFLAGS="-O2 -march=armv7-a -mtune=cortex-a9" export CXXFLAGS="$CFLAGS"
CONFIGURE_FLAGS
:这个环境变量用于存储传递给configure
脚本的参数。在交叉编译过程中,您可能需要为configure
脚本指定特定的目标平台和编译选项,例如:
export CONFIGURE_FLAGS="--host=arm-linux-gnueabihf --prefix=/path/to/target"
请注意,不同的第三方库可能需要设置其他特定的环境变量。在进行交叉编译时,请务必查阅库的文档以了解可能需要设置的其他环境变量和编译选项。