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

目录标题

  • Linux环境变量简要介绍
  • 编译过程中重要的环境变量
    • LD\_LIBRARY\_PATH
    • LIBRARY\_PATH
    • `PKG_CONFIG`环境变量
  • 其他可选变量

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"

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/19170.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Lombok工具 : 常用注解介绍 (全)

文章目录 介绍引入Maven依赖常用的注解 NoArgsConstructor/AllArgsConstructorRequiredArgsConstructorGetter/SetterToString/EqualsAndHashCodeDataBuilderAccessors 其他注解 SneakyThrowsValueCleanupNotNullSynchronizedLog、Log4j、Slf4j、Log4j2、CommonsLog、XSlf4j等…

Type-C显示器是什么,Type-C显示器的5大优势

在显示器领域内,USB Type-C接口还处于发展阶段,目前已经在新推出的一些高端显示器和旗舰显示器中有配置。USB Type-C接口的出现,将会形成以显示器为核心的桌面解决方案,用户可以把任何笔记本、手机、平板等等的画面转移到一台大屏…

docker php安装redis扩展

有这么一个情况,我在docker中,安装了镜像,也启动了容器,容器有:nginx、mysql、redis、php 是一个基本的开发环境 容器启动成功,我们先连接一下,看看是否正常。 先保证这些都ok,我们…

数据可视化工具 - ECharts以及柱状图的编写

1 快速上手 引入echarts 插件文件到html页面中 <head><meta charset"utf-8"/><title>ECharts</title><!-- step1 引入刚刚下载的 ECharts 文件 --><script src"./echarts.js"></script> </head>准备一个…

一顿饭的事儿,搞懂了Linux5种IO模型

大家好&#xff0c;我是老三&#xff0c;人生有三大难题&#xff0c;事业、爱情&#xff0c;和 ——这顿吃什么&#xff01; 人在家中躺&#xff0c;肚子饿得响&#xff0c;又到了不得不吃的时候&#xff0c;这顿饭该怎么吃&#xff1f;吃什么呢&#xff1f; Linux里有五种I…

chatgpt搜索脚本

安装地址 https://greasyfork.org/zh-CN/scripts/459997 注意事项 &#xff01;&#xff01;注意&#xff1a;如果你在360相关浏览器上使用插件。360搜索将不会生效&#xff0c;因为已被浏览器禁用在so.com网址上使用。 &#xff01;&#xff01;尽量选择tampermonkey脚本管…

Datax的使用说明及入门操作案例演示

1.DataX DataX 是阿里云 DataWorks数据集成 的开源版本&#xff0c;在阿里巴巴集团内被广泛使用的离线数据同步工具/平台。DataX 实现了包括 MySQL、Oracle、OceanBase、SqlServer、Postgre、HDFS、Hive、ADS、HBase、TableStore(OTS)、MaxCompute(ODPS)、Hologres、DRDS, dat…

第四十九章 Unity UI适配器组件

首先&#xff0c;我们介绍内容大小适配器 (Content Size Fitter)组件。 我们新建一个“SampleScene6.unity”场景&#xff0c;然后添加一个Text UI元素&#xff0c;让其居中显示&#xff0c;并且尺寸设置为50*30。 由于我们设置Text的尺寸在水平方向上面太小&#xff0c;也就是…

计算机毕业论文内容参考|基于神经网络的网络安全态势感知技术研究

文章目录 导文文章重点摘要前言绪论课题背景国内外现状与趋势课题内容相关技术与方法介绍技术分析技术设计技术实现总结与展望导文 基于神经网络的网络安全态势感知技术研究 文章重点 摘要 随着互联网的快速发展,网络攻击的频率和复杂度也在逐年增加。为了更好地保护信息系统…

【Python】【进阶篇】27、Django url标签详解

目录 27、Django url标签详解1. url标签基本使用2. 给定参数的动态url 27、Django url标签详解 在 Django 的模板语言中除了我们前面章节介绍过的 if 标签和 for 标签之外&#xff0c;还有许多我们时常用到标签&#xff0c;比如 url 标签。 1. url标签基本使用 Django 的模板…

4.6k Star,SpringBoot+Vue+App+硬件实现的智能家居系统,一套带走

今天&#xff0c;推荐一个智能家居系统项目。这是我目前见过的最好的智能家居系统项目&#xff0c;功能完整&#xff0c;代码结构清晰。值得推荐。 4.6k Star&#xff0c;SpringBootVueApp硬件实现的智能家居系统&#xff0c;一套带走 简介 FastBee是一个简单易用的物联网平…

【设计模式】责任链模式的介绍及其应用

责任链的介绍 责任链模式是一种对象的行为模式。在责任链模式里&#xff0c;很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递&#xff0c;直到链上的某一个对象决定处理此请求。发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求&a…

谷歌浏览器 | Chrome DevTools系统学习篇-Device Mode

大家好&#xff0c;文接上回谷歌浏览器 | Chrome DevTools系统学习篇-概述。所谓“工欲善其事&#xff0c;必先利其器”&#xff0c;我们进一步来熟悉谷歌开发者工具。今天分享的是Device Mode&#xff0c;使用设备模式来估算您的页面在移动设备上的外观和性能。 设备模式是 Ch…

QT多线程基础

文章目录 前言一、多线程概念介绍二、创建一个线程三、start和terminate函数四、如何不使用terminate函数终止线程总结 前言 本篇文章来讲解一下QT中的多线程使用方法。 其实线程这个概念对于我们来说并不陌生&#xff0c;main函数在多线程中一般就被称为主线程。 在QT中&am…

如何在IVD行业运用IPD?

IVD&#xff08;体外诊断&#xff0c;In Vitro Diagnostic&#xff09;是指对人体样本&#xff08;血液、体液、组织&#xff09;进行定性或定量的检测&#xff0c;进而判断疾病或机体功能的诊断方法。IVD目前已经成为疾病预防、诊断治疗必不可少的医学手段&#xff0c;约80%左…

这才是 玩转Github 的正确姿势

这才是 玩转Github 的正确姿势 GitHub各位应该都很熟悉了&#xff0c;全球最大的开源社区&#xff0c;也是全球最大的同性交友网站~~&#xff0c;但是大部分同学使用GitHub应该就是通过别人的开源链接&#xff0c;点进去下载对应的项目&#xff0c;而真正使用Github来查找开源…

camunda的Java委托如何使用

一、camunda的Java委托有什么用途 在Camunda中&#xff0c;Java委托是一种用于在流程执行期间执行自定义逻辑的Java类。使用Java委托&#xff0c;您可以在流程执行期间通过Java代码实现各种复杂的业务逻辑。 以下是一些使用Java委托的常见用途&#xff1a; 1、计算值&#x…

有什么好用的云渲染?

在CG制作流程中&#xff0c;离线渲染一直是必要且耗时的环节。你的场景越复杂&#xff0c;渲染出现问题的可能性就越大&#xff0c;尤其是当你独自工作&#xff0c;没有人给你建议的时候&#xff0c;灯光、模型、场景任何一个环节渲染时出现问题都可能让你焦头烂额&#xff0c;…

基于Kubernetes集群构建大中型企业CICD应用平台(2)--code阶段工具gitlab安装

这里我们为gitlab服务器准备一台虚拟机&#xff1a;192.168.19.6-gitlab服务器 在code阶段&#xff0c;我们需要将不同版本的代码存储到一个仓库中&#xff0c;常见的版本控制工具就是SVN或者Git&#xff0c;这里我们采用Git作为版本控制工具&#xff0c;GitLab作为远程仓库。…

5 创建映射

5 映射 上边章节安装了ik分词器&#xff0c;如果在索引和搜索时去使用ik分词器呢&#xff1f;如何指定其它类型的field&#xff0c;比如日期类型、数 值类型等。 本章节学习各种映射类型及映射维护方法。 5.1 映射维护方法 1、查询所有索引的映射&#xff1a; GET&#xf…
最新文章