当前位置: 首页 > news >正文

简述网站开发流程 旅游seo 页面

简述网站开发流程 旅游,seo 页面,群辉怎么做网站,网站建设honmau【cmake实战:番外】交叉编译——Linaro 一、交叉编译1、交叉编译简介2、为什么会有交叉编译 二、交叉编译链1、什么是交叉编译链2、交叉编译工具 三、Linaro1、下载2、解压3、demo3.1、toolchain_aarch64.cmake3.2、CMakeLists.txt3.3、main.cpp 4、执行编译5、查看…

【cmake实战:番外】交叉编译——Linaro

  • 一、交叉编译
    • 1、交叉编译简介
    • 2、为什么会有交叉编译
  • 二、交叉编译链
    • 1、什么是交叉编译链
    • 2、交叉编译工具
  • 三、Linaro
    • 1、下载
    • 2、解压
    • 3、demo
      • 3.1、toolchain_aarch64.cmake
      • 3.2、CMakeLists.txt
      • 3.3、main.cpp
    • 4、执行编译
    • 5、查看编译的可执行程序

原创作者:郑同学的笔记
原创地址:https://zhengjunxue.blog.csdn.net/article/details/132722319
qq技术交流群:921273910

一、交叉编译

1、交叉编译简介

  • 本地编译

本地编译可以理解为,在当前编译平台下,编译出来的程序只能放到当前平台下运行。平时我们常见的软件开发,都是属于本地编译:

比如,我们在 x86 平台上,编写程序并编译成可执行程序。这种方式下,我们使用 x86 平台上的工具,开发针对 x86 平台本身的可执行程序,这个编译过程称为本地编译。

  • 交叉编译

交叉编译可以理解为,在当前编译平台下,编译出来的程序能运行在体系结构不同的另一种目标平台上,但是编译平台本身却不能运行该程序:

比如,我们在 x86 平台上,编写程序并编译成能运行在 ARM 平台的程序,编译得到的程序在 x86 平台上是不能运行的,必须放到 ARM 平台上才能运行。

2、为什么会有交叉编译

交叉编译的主要原因是开发和构建应用程序时,目标平台与开发主机的体系结构不同。以下是一些常见情况,会导致需要进行交叉编译:

  • 嵌入式系统开发:嵌入式系统通常使用特定的处理器架构和操作系统,与开发主机不同。为了在嵌入式设备上运行应用程序,需要使用交叉编译工具链将代码从开发主机编译为适用于目标平台的可执行文件。

  • 跨平台开发:如果你希望在多个平台上运行应用程序(例如,Windows、Linux、MacOS等),可以使用交叉编译来生成适用于不同平台的可执行文件。这样可以节省时间和精力,并确保应用程序在各个平台上都能正常运行。

  • 性能优化:有时,为了提高应用程序的性能,可能需要在更高性能的目标平台上进行编译。通过交叉编译,可以在较强的硬件平台上将应用程序进行优化,并在其他相对较弱的平台上运行。

  • 保护知识产权:交叉编译还可以用于保护知识产权或代码的专有性。通过在开发主机上进行编译,可以防止直接在目标平台上暴露源代码,从而提高应用程序的安全性。

总之,交叉编译提供了一种灵活的方式,允许开发人员在不同体系结构和操作系统的平台上开发和构建应用程序。它为跨平台开发、嵌入式系统开发和性能优化等方面提供了便利,并提高了代码的安全性和保护知识产权的能力。

二、交叉编译链

1、什么是交叉编译链

  • 编译流程
    可以分解为4个步骤,分别是预处理(Prepressing)、编译(Compilation)、汇编(Assembly)和链接(Linking),如图所示。
    在这里插入图片描述

因此,交叉编译链就是为了编译跨平台体系结构的程序代码而形成的由多个子工具构成的一套完整的工具集。同时,它隐藏了预处理、编译、汇编、链接等细节,当我们指定了源文件(.c)时,它会自动按照编译流程调用不同的子工具,自动生成最终的二进制程序

2、交叉编译工具

目前主流的交叉编译工具链有以下几种:

  • Linaro 提供的 ARM 交叉编译工具链,可以到 Linaro 官网 Linaro Releases 去下载已经制作好的交叉编译工具链¹。
  • yagarto 提供的 ARM 交叉编译工具链,可以到 yagarto 官网 Yet another GNU ARM toolchain 去下载已经制作好的交叉编译工具链¹。
  • crosstool-ng 是一个用于构建自定义交叉编译工具链的工具,它可以支持多种目标平台和配置选项,可以到 crosstool-ng 官网 crosstool-ng 去下载源码并按照文档进行安装和使用²。
  • buildroot 是一个用于构建嵌入式 Linux 系统的工具,它可以自动下载、配置、编译和安装交叉编译工具链、内核、根文件系统等组件,可以到 buildroot 官网 Buildroot 去下载源码并按照文档进行安装和使用³。

常用的交叉编译工具链

三、Linaro

1、下载

  • Linaro:官网下载https://www.linaro.org/downloads/
  • 首先,点击from the Arm website.(如下图)
    在这里插入图片描述
  • 然后,点击Download Arm GNU Toolchain(如下图)
    在这里插入图片描述
  • 最后,点击arm-gnu-toolchain-12.3.rel1-x86_64-aarch64-none-linux-gnu.tar.xz(如下图)
    在这里插入图片描述

这两个版本都是针对 AArch64 架构的 GNU/Linux 目标,也就是 ARM 64 位架构。它们的主要区别在于字节序(Endianness)。

  1. AArch64 GNU/Linux target (aarch64-none-linux-gnu):
    架构:AArch64(ARM 64 位)
    字节序:默认为小端字节序(Little Endian)
    文件名示例:gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu.tar.xz
    AArch64 GNU/Linux target (aarch64_be-none-linux-gnu):

  2. 架构:AArch64(ARM 64 位)
    字节序:大端字节序(Big Endian)
    文件名示例:gcc-arm-10.3-2021.07-x86_64-aarch64_be-none-linux-gnu.tar.xz
    大多数情况下,我们使用的是小端字节序(Little Endian),因此针对小端字节序的版本更为常见和普遍。大端字节序(Big Endian)版本在特定的应用场景中使用较少,例如某些嵌入式系统或遗留系统可能需要使用大端字节序。


    因此,如果你计划在普通的 ARM 64 位系统上进行开发和编译,建议选择 aarch64-none-linux-gnu 版本。如果你的目标平台或项目需要使用大端字节序,可以选择 aarch64_be-none-linux-gnu 版本。

2、解压

sudo tar -xvf ./gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu.tar.xz -C /usr/local

3、demo

3.1、toolchain_aarch64.cmake

set(CMAKE_SYSTEM_NAME linux)
set(CMAKE_SYSTEM_PROCESSOR aarch64)set(TOOLCHAIN_DIR /usr/local/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu)set(CMAKE_C_COMPILER ${TOOLCHAIN_DIR}/bin/aarch64-none-linux-gnu-gcc)
set(CMAKE_CXX_COMPILER ${TOOLCHAIN_DIR}/bin/aarch64-none-linux-gnu-g++)#指定交叉编译环境的目录
set(CMAKE_FIND_ROOT_PATH "${ARM_SYSROOT}")
#从来不在指定目录(交叉编译)下查找工具程序。(编译时利用的是宿主的工具)
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
#只在指定目录(交叉编译)下查找库文件
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
#只在指定目录(交叉编译)下查找头文件
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
#只在指定的目录(交叉编译)下查找依赖包
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)

3.2、CMakeLists.txt

cmake_minimum_required(VERSION 3.0.0)project(process)add_executable("${PROJECT_NAME}" main.cpp)set(EXECUTABLE_OUTPUT_PATH "${PROJECT_SOURCE_DIR}/lib")

3.3、main.cpp

#include <iostream>int main()
{std::cout<<"hello world\n";
}

4、执行编译

  • start.sh
cmake -B build_arm \
-DCMAKE_BUILD_TYPE=release \
-DLINUX_ABI=arm64 \
-DCMAKE_TOOLCHAIN_FILE=../toolchain_aarch64.cmake
cmake --build build_arm -j 16 --config release

在这里插入图片描述

5、查看编译的可执行程序

  • 如下图,可见生成程序的架构为AArch64
readelf -h ./process

在这里插入图片描述
在这里插入图片描述

CMake交叉编译配置实例

http://www.dinnco.com/news/24241.html

相关文章:

  • 简历怎么制作网站哪家公司网站做得好
  • 一个服务器可以放多少网站网络推广员
  • 个人网站免费足球最新世界排名表
  • vs2010可以做动态网站吗seo排名工具外包
  • 大名做网站深圳网站seo推广
  • 北京外贸网站建设2021小说排行榜百度风云榜
  • 淄博网站电子商城平台建设关键词排名方案
  • 网站源码文件指数
  • 建设银行沈阳分行网站郑州seo技术
  • wordpress数据库写文章专业seo培训
  • 淘宝网站后台怎么做100%能上热门的文案
  • java开源网站搜索引擎优化的七个步骤
  • 做软件开发的网站有哪些广东网站优化公司
  • 关键词优化排名易下拉排名广州seo关键字推广
  • asp.net网站制作实例网络推广公司十大排名
  • 网站设计功能整站优化加盟
  • 做网站背景图的科技图片昆明百度关键词优化
  • ps个人网站湖南网站建设营销推广
  • 移动端网站开发教程seo优化推广
  • 网站怎么做站内搜索济南公司网站推广优化最大的
  • 做微商进哪个网站安全吗评论优化
  • 管理系统是网站吗南宁优化网站网络服务
  • 美国站点网站怎么做北京seo公司网站
  • 网站内链案例百度推广后台登录入口官网
  • 郑州专门做网站的公司有哪些怎么看百度关键词的搜索量
  • 商丘网站建设商业软文案例
  • 给诈骗公司做网站网络营销推广方式包括哪些
  • 网站开发实习计划模板想做网站找什么公司
  • 跨境电商网站开发技术网站推广计划书范文
  • 广东网站开发公司电话手机360优化大师官网