【香橙派系列教程】(二十一) 基于OrangePi Zero2的系统移植— 交叉编译工具链配置

embedded/2024/9/22 21:27:51/

【二十一】基于OrangePi Zero2的系统移植— 交叉编译工具链配置

文章目录

  • 【二十一】基于OrangePi Zero2的系统移植— 交叉编译工具链配置
    • 1.关于编译
    • 2.本地编译
    • 3.交叉编译

1.关于编译

编译是指将源代码文件(如C/C++文件)经过预处理、编译、汇编和链接等步骤,转换为可执行文件的过程。将源代码转换成机器代码的过程称为编译(Compile),编译的工作需要编译器(Complier)来完成。

2.本地编译

本地编译是指在当前的编译平台上,生成能在当前平台上运行的可执行文件。例如,在x86平台上,使用x86平台上的工具,开发针对x86平台本身的可执行程序,这个编译过程称为本地编译。
以一个简单的例子来说明本地编译,假设有一个hello.c文件,它包含以下内容:

#include <stdio.h>
int main()
{printf("Hello, world!\n");return 0;
}

我们想要在x86平台上进行本地编译,并在x86平台上运行这个程序。可以使用以下命令:

gcc -o hello hello.c

运行:

./hello//输出结果为:
Hello, world!

3.交叉编译

交叉编译是指在当前的编译平台上,生成能在体系结构不同的另一种目标平台上运行的可执行文件。例如,在x86平台上,使用针对ARM平台的工具,开发针对ARM平台的可执行程序,这个编译过程称为交叉编译
以一个简单的例子来说明本地编译,假设有一个hello.c文件,它包含以下内容:

#include <stdio.h>
int main()
{printf("Hello, world!\n");return 0;
}

想要在x86平台上进行交叉编译,并在ARM平台上运行这个程序。首先需要在虚拟主机家目录下的.bashrc最后配置添加交叉编译工具链:

test@test:~$ vi .bashrc

最后面添加:

export PATH=$PATH:/home/$(whoami)/orangepi-build/toolchains/gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu/bin

然后断开重连桌重新登陆后, 执行export指令,即可看到最新导入的PATH环境变量:

image-20240804141512254

test@test:~$ export
declare -x DBUS_SESSION_BUS_ADDRESS="unix:path=/run/user/1000/bus"
declare -x DISPLAY="localhost:10.0"
declare -x HOME="/home/pg"
declare -x LANG="en_US.UTF-8"
declare -x LC_ADDRESS="zh_CN.UTF-8"
declare -x LC_IDENTIFICATION="zh_CN.UTF-8"
declare -x LC_MEASUREMENT="zh_CN.UTF-8"
declare -x LC_MONETARY="zh_CN.UTF-8"
declare -x LC_NAME="zh_CN.UTF-8"
declare -x LC_NUMERIC="zh_CN.UTF-8"
declare -x LC_PAPER="zh_CN.UTF-8"
declare -x LC_TELEPHONE="zh_CN.UTF-8"
declare -x LC_TIME="zh_CN.UTF-8"
declare -x LESSCLOSE="/usr/bin/lesspipe %s %s"
declare -x LESSOPEN="| /usr/bin/lesspipe %s"
declare -x LOGNAME="pg"
declare -x MOTD_SHOWN="pam"
declare -x OLDPWD="/home/pg/orangepi-build/toolchains/gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu/bin"
declare -x
PATH="/home/pg/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/home/pg/orangepi-build/toolchains/gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu/bin:/home/pg/orangepi-build/toolchains/gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu/bin"

同时执行aarch64-none-linux-gnu-gcc --version 可以看到对应的版本号:

image-20240804164251004

test@test:~$ aarch64-none-linux-gnu-gcc --version
aarch64-none-linux-gnu-gcc (GNU Toolchain for the A-profile Architecture 9.2-2019.12 (arm-9.10)) 9.2.1
20191025
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

在x86平台上进行交叉编译,可以使用以下命令:

image-20240804170017728

aarch64-none-linux-gnu-gcc -o hello hello.c

利用file命令可以看到编译出来的程序是ARM aarch64的二进制程序

test@test:~/test$ file hello
hello: ELF 64-bit LSB executable, ARM aarch64, version 1 (SYSV), dynamically
linked, interpreter /lib/ld-linux-aarch64.so.1, for GNU/Linux 3.7.0, with
debug_info, not stripped

这时候需要将该文件拷贝到比如香橙派等ARM开发板上运行, 在X86宿主机上是无法正常运行的。

image-20240804164522893

scp hello orangepi@192.168.1.28:/home/orangepi

http://www.ppmy.cn/embedded/103157.html

相关文章

redis的RDB快照配置详解

Redis 的 RDB&#xff08;Redis Database Backup&#xff09;快照是一种数据持久化方式&#xff0c;它可以在指定时间间隔内将内存中的数据快照保存到磁盘。这样&#xff0c;即使Redis服务器意外宕机或重启&#xff0c;数据也能从最近的快照中恢复。RDB快照的配置主要涉及以下几…

力扣题/回溯/组合总和

组合总和 力扣原题 给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target &#xff0c;找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 &#xff0c;并以列表形式返回。你可以按 任意顺序 返回这些组合。 candidates 中的 同一个 数字可以 无限…

Netlify 为静态站点部署 Waline 评论系统

目录 1 准备工作2 简介2.1 Netlify2.2 Waline2.3 Leancloud 3 开始搭建3.1 Fork 仓库3.2 设置 Leancloud3.3 部署 Netlify3.4 查看评论系统 从我建成个人网站以来&#xff0c;一个月了&#xff0c;竟然还没配置过评论系统&#xff0c;一直用的别人的 awa。 那么今天就稍微研究…

服务器多核多线程跟高主频的有何区别?

在服务器领域&#xff0c;多核多线程与高主频是两个重要的性能指标&#xff0c;它们各自在提升服务器性能上扮演着不同的角色。了解这两者的区别&#xff0c;对于选择合适的服务器以满足特定业务需求至关重要。 一、多核多线程的优势 多核多线程服务器指的是拥有多个处理器核心…

衡石科技BI的API如何授权文档解析

授权说明​ 授权模式​ 使用凭证式&#xff08;client credentials&#xff09;授权模式。 授权模式流程说明​ 第一步&#xff0c;A 应用在命令行向 B 发出请求。 第二步&#xff0c;B 网站验证通过以后&#xff0c;直接返回令牌。 授权模式结构说明​ 接口说明​ 获取a…

identYwaf:一款基于盲推理识别技术的WAF检测工具

关于identYwaf identYwaf是一款功能强大的Web应用防火墙识别与检测工具&#xff0c;该工具基于盲推理识别技术实现其功能&#xff0c;可以帮助广大研究人员迅速识别目标Web应用程序所使用的保护防火墙类型。 功能介绍 identYwaf所实现的盲推理通过检查一组预定义的测试性&…

C# while循环与do循环

学习循环语句之前&#xff0c;先学习跳转语句 continue语句&#xff1a;跳出当前循环&#xff0c;开始一次新的循环&#xff0c;并没有结束循环 break语句:立刻结束循环 while循环语句 while循环语句可以一次都不执行循环体 举例:制作一个小游戏&#xff0c;输入两个和为10…

常见的加解密算法

介绍 常见的加解密算法有&#xff1a;DES&#xff0c;3DES&#xff0c;AES&#xff0c;PBE&#xff0c;RSA&#xff0c;DSA&#xff0c;ECC&#xff0c;MD5&#xff0c;SHA&#xff0c;HMAC。 分类&#xff1a; 对称加密&#xff1a;DES&#xff0c;3DES&#xff0c;AES&…