Linux 交叉编译第三方库需要设置的环境变量

简介: Linux 交叉编译第三方库需要设置的环境变量

Linux环境变量简要介绍

在Linux系统中,环境变量是一种存储系统设置和配置信息的机制。它们包含了一些关键信息,如可执行文件的搜索路径、编译器选项、库文件路径等。环境变量对于定制系统行为、简化命令行操作以及在不同程序间共享配置信息等方面都非常有用。

环境变量是以“键=值”对的形式存储的,其中键是变量名,值是变量的内容。以下是一些常见的Linux环境变量及其用途:

  1. PATH:这个环境变量定义了系统在执行命令时搜索可执行文件的路径列表。当在命令行中输入一个命令时,系统会按照PATH变量中指定的路径顺序查找可执行文件。
  2. HOME:这个环境变量表示用户的主目录路径。大多数用户配置文件和个人数据文件都存储在这个目录下。
  3. USER:这个环境变量表示当前登录用户的用户名。
  4. SHELL:这个环境变量表示用户的默认Shell程序。常见的Shell程序有Bash、Zsh等。
  5. LD_LIBRARY_PATH:这个环境变量指定了系统在运行时搜索共享库的路径。当您需要在非标准目录中安装库文件时,可以通过修改这个变量来确保系统能够正确地找到库文件。
  6. LANGLC_*:这些环境变量用于配置系统的本地化设置,如语言、字符集、时间格式等。
  7. EDITORVISUAL:这些环境变量指定了用户的默认文本编辑器。当您需要在命令行中编辑文本文件时,系统会使用这些变量中指定的编辑器。
  8. TERM:这个环境变量定义了终端模拟器的类型。它用于告诉应用程序如何与终端模拟器进行交互,以确保正确的显示和行为。
  9. PS1:这个环境变量定义了Shell提示符的格式。您可以自定义这个变量以改变提示符的外观和包含的信息。
  10. TMPDIR:这个环境变量指定了系统用于存储临时文件的目录。应用程序通常使用这个变量来确定在哪里创建临时文件。
  11. DISPLAY:这个环境变量用于指定X Window系统中显示设备的名称。它允许您控制哪个显示设备应该用于图形界面应用程序。
  12. http_proxyhttps_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中,您可以使用exportechounset命令来设置、查看和清除环境变量。

编译过程中重要的环境变量

# 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.sold-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 在编译和链接阶段起作用,主要用于以下场景:

  1. 当库文件安装在非系统默认路径的目录中时,可以通过设置 LIBRARY_PATH 来指定这些库的路径,以便编译器能够找到并链接它们。
  2. 当使用自定义编译的库或多个版本的库时,可以通过设置 LIBRARY_PATH 来确保编译器链接到正确的库版本。
  3. 当在开发过程中需要频繁切换不同版本或构建配置的库时,可以通过修改 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文件来提供相关信息,从而避免手动指定各种编译和链接选项。

其他可选变量

有些可以在命令行直接加,当然你也可以选择加在环境变量里

以下是一些可以设置的环境变量:

  1. CCCXX:这两个环境变量分别指定C和C++编译器的路径。在交叉编译时,您需要将它们设置为交叉编译工具链中的编译器,例如:
export CC="/path/to/cross-compiler-gcc"
export CXX="/path/to/cross-compiler-g++"
  1. ARRANLIB:这两个环境变量分别指定静态库创建工具(archiver)和符号表生成工具(ranlib)。在交叉编译时,您需要将它们设置为交叉编译工具链中对应的工具,例如:
export AR="/path/to/cross-compiler-ar"
export RANLIB="/path/to/cross-compiler-ranlib"
  1. CPPFLAGSLDFLAGS:这两个环境变量分别用于指定编译器的预处理选项和链接器的选项。在交叉编译过程中,您可能需要指定目标平台的头文件和库文件路径,例如:
export CPPFLAGS="-I/path/to/target/include"
export LDFLAGS="-L/path/to/target/lib"
  1. CFLAGSCXXFLAGS:这两个环境变量分别用于指定C和C++编译器的编译选项。在交叉编译时,您可能需要为目标平台指定特定的编译选项,例如优化级别、架构和指令集等。
export CFLAGS="-O2 -march=armv7-a -mtune=cortex-a9"
export CXXFLAGS="$CFLAGS"
  1. CONFIGURE_FLAGS:这个环境变量用于存储传递给configure脚本的参数。在交叉编译过程中,您可能需要为configure脚本指定特定的目标平台和编译选项,例如:
export CONFIGURE_FLAGS="--host=arm-linux-gnueabihf --prefix=/path/to/target"

请注意,不同的第三方库可能需要设置其他特定的环境变量。在进行交叉编译时,请务必查阅库的文档以了解可能需要设置的其他环境变量和编译选项。


目录
相关文章
|
9天前
|
关系型数据库 MySQL Linux
Linux系统如何设置自启动服务在MySQL数据库启动后执行?
【10月更文挑战第25天】Linux系统如何设置自启动服务在MySQL数据库启动后执行?
50 3
|
1月前
|
Ubuntu Linux
Linux实践|设置静态 IP 地址
Linux实践|设置静态 IP 地址
54 0
Linux实践|设置静态 IP 地址
|
1月前
|
Linux 应用服务中间件 nginx
Linux下权限设置之suid、sgid、sticky
Linux下权限设置之suid、sgid、sticky
|
2月前
|
NoSQL Linux Redis
Linux Redis 服务设置开机自启动
【9月更文挑战第2天】在 Linux 系统中,可使用两种方法设置 Redis 开机自启动:一是通过创建 `redis.service` 文件并利用 systemd 进行管理,包括定义服务参数和启动脚本;二是编辑 `/etc/rc.local` 文件,在其中添加启动命令。推荐使用 systemd 方法,因为它更符合现代 Linux 系统的设计理念。设置完成后,可通过 `sudo systemctl status redis.service` 检查服务状态。
256 3
|
2月前
|
Linux Shell
10-8|linux date设置时间
10-8|linux date设置时间
|
2月前
|
Unix Linux Python
Cron定时设置在linux和mac中的使用
文章详细说明了如何在Linux和Mac操作系统中使用Cron进行定时任务的设置,并提供了多个Cron表达式的实例。
36 0
|
3月前
|
NoSQL Linux C语言
嵌入式GDB调试Linux C程序或交叉编译(开发板)
【8月更文挑战第24天】本文档介绍了如何在嵌入式环境下使用GDB调试Linux C程序及进行交叉编译。调试步骤包括:编译程序时加入`-g`选项以生成调试信息;启动GDB并加载程序;设置断点;运行程序至断点;单步执行代码;查看变量值;继续执行或退出GDB。对于交叉编译,需安装对应架构的交叉编译工具链,配置编译环境,使用工具链编译程序,并将程序传输到开发板进行调试。过程中可能遇到工具链不匹配等问题,需针对性解决。
|
3月前
|
Linux 网络安全
在Linux中,如何设置防火墙规则?
在Linux中,如何设置防火墙规则?
|
3月前
|
网络协议 Linux 网络架构
在Linux中,如何设置网络路由?
在Linux中,如何设置网络路由?
|
2月前
|
Linux
linux内核执行fork时对写时复制的设置
linux内核执行fork时对写时复制的设置