【备忘】 交叉编译环境搭建

关于zynq petalinux 2020.2版本交叉编译环境工具链的搭建和使用备忘 用过xilinx zynq petalinux的人都知道petalinux编译一次非常慢,即使下载了sstate和download包之后编译还是很慢很慢,真是让人难以接受了。。。。 so....经过我一番艰苦研究之后终于弄明白了如何使用petalinux生成的sdk来编译自己的驱动程序,步骤如下: 第一步:vivado搭建硬件环境,编译出xsa,在petalinux下创建工程,按照官方指导步骤最后 petalinux-build 编译一次生成整个linux工程 第二步:使用petalinux-buil 阅读详情

----背景

一个aarch64的设备中有两个SDK,分别需要使用两种不同gcc版本编译,于是在x86上搭一个方便整体切换的交叉编译环境。环境包括:

  • gcc-{$version}
  • g+±{$version}
  • aarch64-linux-gnu-gcc-{$version}
  • aarch64-linux-gnu-g+±{$version}
  • cpp-{$version}

使用update-alternatives工具管理,写一个函数放在.zshrc(或者.bashrc)中,用一条命令整体切换环境。


----步骤

1、安装软件(以gcc-10为例)

sudo apt-get install gcc-10 g++-10 cpp-10 gcc-10-aarch64-linux-gnu-base gcc-10-aarch64-linux-gnu g++-10-aarch64-linux-gnu

2、设置update-alternatives

  1. 设置gcc、g++、aarch64-linux-gnu-gcc-10、aarch64-linux-gnu-g+±10
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-10 20 \                                                 
--slave /usr/bin/g++ g++ /usr/bin/g++-10 \
--slave /usr/bin/aarch64-linux-gnu-gcc aarch64-linux-gnu-gcc /usr/bin/aarch64-linux-gnu-gcc-10 \
--slave /usr/bin/aarch64-linux-gnu-g++ aarch64-linux-gnu-g++ /usr/bin/aarch64-linux-gnu-g++-10
  1. 设置cpp
sudo update-alternatives --install /usr/bin/cpp cpp /usr/bin/cpp-10 20

3、测试设置是否成功

sudo update-alternatives --config gcc
## 以下为输出:
有 4 个候选项可用于替换 gcc (提供 /usr/bin/gcc)。

  选择       路径           优先级  状态
------------------------------------------------------------
* 0            /usr/bin/gcc-12   80        自动模式
  1            /usr/bin/gcc-10   20        手动模式
  2            /usr/bin/gcc-11   60        手动模式
  3            /usr/bin/gcc-12   80        手动模式
  4            /usr/bin/gcc-9    40        手动模式

要维持当前值[*]请按<回车键>,或者键入选择的编号:1
update-alternatives: 使用 /usr/bin/gcc-10 来在手动模式中提供 /usr/bin/gcc (gcc)
sudo update-alternatives --config cpp
## 以下为输出:
有 5 个候选项可用于替换 cpp (提供 /usr/bin/cpp)。

  选择       路径           优先级  状态
------------------------------------------------------------
* 0            /usr/bin/cpp-12   80        自动模式
  1            /usr/bin/cpp      10        手动模式
  2            /usr/bin/cpp-10   20        手动模式
  3            /usr/bin/cpp-11   60        手动模式
  4            /usr/bin/cpp-12   80        手动模式
  5            /usr/bin/cpp-9    40        手动模式

要维持当前值[*]请按<回车键>,或者键入选择的编号:2
update-alternatives: 使用 /usr/bin/cpp-10 来在手动模式中提供 /usr/bin/cpp (cpp)

4、 写一个函数放在.zshrc

  1. 打开shell的配置文件
# 用zsh的,输入以下命令
sudo nano ~/.zshrc
# 用bash的,输入一下命令
sudo nano ~/.bashrc
  1. 在末尾输入以下脚本函数
# 切换 gcc 和 cpp 版本的函数
switch_gcc_cpp() {
    # 获取 update-alternatives 管理下的所有 gcc 版本
    local options=($(update-alternatives --list gcc))
    
    if [ ${#options[@]} -eq 0 ]; then
        echo "没有找到任何由 update-alternatives 管理的 gcc 版本。"
        return 1
    fi

    # 打印选项列表
    echo "请选择要使用的 gcc 版本:"
    for i in "${options[@]}"; do
        local version=$(basename "$i")
        echo "  ${options[(i)$i]-1}) $version"
    done

    # 用户选择
    echo -n "请输入编号: "
    read choice

    # 检查输入是否为数字以及是否在范围内
    if [[ ! "$choice" =~ ^[0-9]+$ ]] || (( choice < 0 || choice > ${#options[@]} )); then
        echo "无效的选择。"
        return 1
    fi

    local selected_gcc=${options[$choice]}
    #local selected_version=$(basename "$selected_gcc")
    local selected_version=${selected_gcc##*gcc-}
    # echo -n "The selected_gcc is $selected_gcc"
    # echo -n "The selected_version is $selected_version"
    # 切换 gcc 和 cpp
    sudo update-alternatives --set gcc "$selected_gcc"
    sudo update-alternatives --set cpp "/usr/bin/cpp-$selected_version"

    # 如果有对应的交叉编译工具链也一并切换
    # if [ -e "/usr/bin/aarch64-linux-gnu-gcc-$selected_version" ]; then
    #     sudo update-alternatives --set aarch64-linux-gnu-gcc "/usr/bin/aarch64-linux-gnu-gcc-$selected_version"
    #     sudo update-alternatives --set aarch64-linux-gnu-g++ "/usr/bin/aarch64-linux-gnu-g++-$selected_version"
    #     sudo update-alternatives --set aarch64-linux-gnu-cpp "/usr/bin/aarch64-linux-gnu-cpp-$selected_version"
    # fi

    echo "已成功切换到 gcc 和 cpp 版本 $selected_version。"
}
  1. 生效配置
source ~/.zshrc  # or .bashrc, depend on your shell
  1. 测试
(base)  ~/ switch_gcc_cpp
请选择要使用的 gcc 版本:
  1) gcc-10
  2) gcc-11
  3) gcc-12
  4) gcc-9
请输入编号: 1
已成功切换到 gcc 和 cpp 版本 10。
交叉编译详解 在嵌入式开发中,经常会提到交叉编译,那么什么是交叉编译?和我们本地编译有什么区别呢?怎么使用交叉编译工具呢?在问题之前,我们先简单说明下编译,用本地编译来对比说明。在程序开发中,使用高级语言编写的代码被称为源代码,比如用C语言编写的后缀名为.c的文件,或者C++编写的后缀名为.cpp的文件。源代码不能被机器执行,必须转换成二进制的机器代码(指令+数据)才能被CPU执行。将源代码转换成机器代码的过程称为编译(Compile),编译的工作需要编译器(Complier)来完成。编译器对源代码进行语法检查,只有没有 阅读详情

相关推荐

QT·移植Qt到ARM平台及搭建Qt交叉编译环境

移植Qt到ARM平台及搭建Qt交叉编译环境

m0_64560763的博客 1万+

嵌入式系统——交叉编译概念与环境搭建

嵌入式开发的基础和环境布置:基于amd64 Ubuntu18.04 虚拟机搭建ARM32交叉编译工具链

weixin_43229184的博客 4915

Ubuntu16.04 ARM/Qt 交叉编译环境搭建

嵌入式开发Ubuntu16.04 ARM/Qt 交叉编译环境搭建背景环境说明安装交叉编译工具下载Qt源码包编译Qt源码安装QtCreator配置QtCreator应用QtCreator交叉编译 Ubuntu16.04 ARM/Qt 交叉编译环境搭建 最近由于工作需要,接触到交叉编译,鉴于之前没有完整做过这方面的工作,记录一下。后续也会尽量把相关的内容都加入进来 背景 最近由于客户需求,要将windows下的一个网络相机的sdk移植到嵌入式环境下,客户用的开发板是toybrick-3399Pro,目前手上

colinjen的博客 4302

交叉编译环境搭建

ARM 裸机、 Uboot 移植、 Linux 移植这些都需要在 Ubuntu 下进行编译,编译就需要编译器,交叉编译器就是:1、它肯定是一个GCC 编译器。2、这个GCC 编译器是运行在X86 架构的 PC 上的。3、这个 GCC 编译器是编译 ARM 架构代码的,也就是编译出来的可执行文件是在 ARM 芯片上运行的交叉编译器有很多种,我们使用 Linaro 出品的交叉编译器。

weixin_52849254的博客 2593

QTcreate交叉编译环境搭建

文章目录1.安装QTCreate2.搭建交叉编译环境2.1设置qmake2.2设置编译工具链2.3设置构建套件(Kit)3.QTCreate载入项目3.1选择构建套件(Kit)进行编译3.2编写配置文件.pro3.3编译生成Makefile和应用程序4.小机端测试 1.安装QTCreate 下载路径: https://download.qt.io/archive/qt/ 选择要安装的版本的qt...

xixihaha331的博客 3098

在Ubuntu上搭建树莓派交叉编译环境

交叉编译一、什么是本地编译二、什么是交叉编译三、为什么要有交叉编译四、搭建交叉编译环境 一、什么是本地编译 我们之前常见的软件开发,都是属于本地编译:比如说ununtu下gcc的编译就是本地编译,也就是说在当前平台编译,编译得到的程序也是在本地执行。 二、什么是交叉编译 交叉编译通俗地讲就是在一种平台上编译出能运行在体系结构不同的另一种平台上的程序,比如在PC平台(X86 CPU)上编译出能运行在以ARM为内核的CPU平台上的程序,编译得到的程序在X86 CPU平台上是不能运行的,必须放到ARM CPU平台

makunIT的博客 3053

【一、交叉编译环境搭建】

介绍arm交叉编译环境的搭建

anmo_moan的博客 4270

Ubuntu 搭建 ARM 交叉编译环境

Ubuntu 搭建 ARM 交叉编译环境准备环境配置 ARM解压配置环境变量使环境变量生效并验证编译测试 准备环境 环境:Ubuntu16.04X64 下载:arm-linux-gcc-4.4.3.tar.gz 注意: arm-linux-gcc-4.4.3.tar.gz是32位,如果使用的系统是Ubuntu 32bit。则可以直接进行环境搭建。如果 系统是Ubuntu 64bit,需要给系统安装32bit的依赖库: sudo apt-get install libc6:i386 sudo apt-g

wzfgd的博客 4369

通用 Qt 交叉编译环境搭建攻略

本攻略将指导如何在任意 ARM 平台开发板上搭建 Qt 交叉编译环境。目标是使用 Qt 在 ARM 开发板上运行应用程序,但无论是选择哪个开发板(如 i.MX6U 或其他),都可以参考本攻略进行环境搭建,重要的是学习方法,注意:不要原搬照抄,根据自己的实际情况作相应的替换。

lcyzxc的博客 3080

CentOS 7 搭建交叉编译环境(上)

前段时间由于工作上的需要,需要编译程序在MIPS架构的终端上运行,于是就学习了一下交叉编译相关的一些知识,并尝试自己搭建了交叉编译环境最终编译程序运行OK,现对该学习过程做个总结; 什么是交叉编译 本地编译:即在当前目标平台下编译出来的程序,并且可以运行在当前平台上;简单理解就是编译和运行环境是一致的。 交叉编译:所谓的交叉(cross)是一个和本地编译相对应的概念,即在当前目标平台下编译出...

zhaihaibo168的博客 6037

在Linux系统下搭建交叉编译环境及编程

在本文中,我们将详细介绍如何在Linux系统下建立一个交叉编译环境,以便能够在一台计算机上编译和构建适用于不同平台的程序。交叉编译工具链包括交叉编译器、交叉链接器和交叉调试器等工具,它们用于将源代码编译成适用于目标平台的可执行文件。至此,我们已经成功地建立了Linux系统下的交叉编译环境,并编译并运行了一个简单的示例程序。根据你的目标平台,你可能需要安装相应的工具链。在开始交叉编译之前,我们需要创建一个配置文件,告诉编译器我们要使用交叉编译工具链。将生成的可执行文件传输到目标平台,并在目标平台上运行它。

TechCraze的博客 948

Linux下的Qt环境搭建(arm交叉编译)

Linux下的Qt环境搭建(arm交叉编译)Qt环境安装应用安装gl库安装交叉编译器配置交叉编译器到qtcreator创建应用编译运行设置成开机自启动 注意:本文软件环境为在虚拟机里搭建的ubuntu-14.04.5-desktop-amd64.iso,虚拟机版本VMware-workstation-full-9.0.0,如果链接中内容发生迁移无法下载可留下联系方式,虚拟机系统安装过程本文不做讲解...

会飞的蜗牛 5万+

开关电源设计实战:如何用AP值快速选型磁芯(附计算公式推导)

本文为开关电源工程师提供了基于AP值的磁芯快速选型实战指南。文章深入解析了AP值作为磁芯‘功率吞吐量’指标的核心物理意义,并通过详细的公式推导和24W反激电源设计实例,手把手演示如何利用AP值计算公式,结合电流密度、窗口利用率等关键参数,从众多磁芯型号中高效筛选出合适型号,同时强调了选型后的关键校验步骤与常见误区。

weixin_29234239的博客 871

VsCode搭建交叉编译环境

使用的vscode搭建一个交叉编译环境来开发,在此记录一下整个环境搭建、程序编译、debug的过程;整个过程会使用到GitBash或cmd执行指令、gcc交叉编译器进行编译、mingw包执行make指令、openocd进行下载调试,下面逐一介绍具体步骤。

weixin_50460833的博客 4148

西门子200SMART自定义库开发实战:从PID到露点算法的工业应用

本文详细介绍了西门子200SMART自定义库开发实战,涵盖从PID控制到露点算法的工业应用。通过代码封装技巧、多语言支持和性能优化等高级开发方法,帮助工程师提升PLC编程效率。文章特别强调了自创库在实际项目中的优势,如恒温恒湿控制系统的成功案例,展示了自定义库在工业自动化中的强大应用价值。

lake5的博客 1023

电网加密芯片全解析:分类与功能​

在电网数字化转型的浪潮中,数据安全和设备的身份认证变得愈发重要。加密芯片作为保障电网信息安全的核心部件,凭借独特的技术特性,在不同应用场景下发挥着关键作用,有力推动着智能电网的安全稳定发展。接下来,我们将对电网中常见的加密芯片展开分类介绍,并探讨其对应的功能。​。

1961

交叉编译环境搭建与测试

一、什么是交叉编译 ​ 在一种计算机环境中运行的编译程序,能编译出在另外一种环境下运行的代码,我们就称这种编译器支持交叉编译。这个编译过程就叫交叉编译。 简单地说,就是在一个平台上生成另一个平台上的可执行代码。 这里需要注意的是所谓平台,实际上包含两个概念: 1. 体系结构(Architecture) 2. 操作系统(OperatingSystem)。 同一个体系结构可以运行不同的操作系统;同样,同一个操作系统也可以在不同的体系结构上运行。 举例来说: 我们常说...

程序课代表的博客 7072

如何用Python爬取中国土地市场网2000-2023年土地出让数据(含经纬度)

本文详细介绍了如何使用Python爬取中国土地市场网2000-2023年的土地出让数据(含经纬度),提供了一套高效的技术方案。通过应对动态加载的反爬机制、优化地理编码数据存储和设计异常处理流程,帮助开发者建立自动化数据采集管道。方案已在商业地产分析项目中验证,可稳定采集超过50万条土地交易记录。

weixin_30566063的博客 172

【一、搭建通用Arm平台的QT交叉编译环境】

arm平台的QT交叉编译环境搭建

anmo_moan的博客 9972

基于 PID 算法的 STM32 步进电机高精度位置控制系统设计与实现(工业自动化应用)

硬件层面:选用 STM32F103C8T6+A4988 + 欧姆龙编码器的组合,兼顾工业可靠性与成本,接线需注意强弱电分离和信号抗干扰;软件层面:核心为位置式 PID 闭环控制,Mermaid 流程图清晰展现 “采集 - 运算 - 驱动” 的闭环逻辑,代码模块化易移植;性能层面:无负载定位误差≤±1 脉冲,带载误差≤±3 脉冲,满足工业自动化高精度位置控制需求。

weixin_42300449的博客 194

STM32F103标准库开发:Keil5新建STM32工程

新建STM32工程 步骤一:创建工程模板文件 新建一个文件夹 template 在文件夹template里面新建五个文件 (1)CMSIS: 存放内核驱动程序和启动引导文件 (2)FWLIB:存放库函数文件 (3)Project:存放工程文件 (4)System:存放自己写的驱动程序 (5)User:存放用户程序(主函数) 步骤二:导入stm...

MQ0522的博客 2万+

MIPS交叉编译环境的搭建(Buildroot)

http://blog.youkuaiyun.com/qq1084283172/article/details/68950682         为了能在我们熟悉的windows或者ubuntu下开发mips架构的程序,需要搭建mips程序的交叉编译环境。mips程序的交叉编译环境的构建需要用编译Buildroot,Buildroot在编译的过程中,会下载一些依赖包,所以在Buildroot的编译安装过程中...

子曰小玖的博客 2万+

巨正则蒙特卡洛—甲烷和二氧化碳的竞争吸附GCMC

巨正则蒙特卡洛—甲烷和二氧化碳的竞争吸附GCMC

Rockyoung 8018

【树莓派】交叉编译环境搭建

PC环境 Ubuntu 18.04 VMware 虚拟机64位 搭建结果 成功 搭建步骤: (1)安装Git工具 sudo apt-get installgit (2)新建文件夹raspberrypi mkdir raspberrypi (3)安装交叉编译工具 cd raspberrypi git clone git://github.com/raspberry...

iefenghao的博客 1万+

搞懂 SAPUI5 Fiori 应用的 OData 授权维护:从 IWSG、IWSV 到 S_SERVICE 的完整实践

本文探讨了SAP Fiori项目中常见的授权问题及其解决方案。文章指出,开发人员常误将OData服务访问问题归咎于前端代码或配置,而实际上多因授权默认值未正确带入角色所致。详细分析了IWSG(前端服务组元数据)和IWSV(后端业务服务)两个关键对象的作用机制,强调应通过PFCG角色的Authorization Default入口维护服务对象,而非直接修改S_SERVICE授权对象。文章还提供了前后端授权配置的具体操作步骤,并特别提醒需同时配置前端和后端授权,才能确保应用完整可用性。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 205

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

上一篇: 【备份】自动列出虚拟环境供用户选择激活
下一篇: 【备忘】ubuntu 24.04安装中文输入法
LateLinux
博客等级 码龄18年 65粉丝 25原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值