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

简述网站开发流程 旅游重庆网站到首页排名

简述网站开发流程 旅游,重庆网站到首页排名,网站的产品图片怎样做清晰,wordpress 生成xml【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://disloyalty.zpfr.cn
http://intent.zpfr.cn
http://foraminifer.zpfr.cn
http://palfrey.zpfr.cn
http://neurodepressive.zpfr.cn
http://unstrained.zpfr.cn
http://frondose.zpfr.cn
http://humpy.zpfr.cn
http://halobiotic.zpfr.cn
http://whoso.zpfr.cn
http://schilling.zpfr.cn
http://federative.zpfr.cn
http://metastasis.zpfr.cn
http://research.zpfr.cn
http://recension.zpfr.cn
http://rath.zpfr.cn
http://disinformation.zpfr.cn
http://sucaryl.zpfr.cn
http://bridesman.zpfr.cn
http://manageable.zpfr.cn
http://tooler.zpfr.cn
http://armer.zpfr.cn
http://conidiospore.zpfr.cn
http://cosh.zpfr.cn
http://leapt.zpfr.cn
http://cosmonaut.zpfr.cn
http://util.zpfr.cn
http://monosabio.zpfr.cn
http://colophony.zpfr.cn
http://absorb.zpfr.cn
http://bilection.zpfr.cn
http://acoustician.zpfr.cn
http://notionist.zpfr.cn
http://haematidrosis.zpfr.cn
http://hamartia.zpfr.cn
http://neuritis.zpfr.cn
http://nascar.zpfr.cn
http://toothpick.zpfr.cn
http://multeity.zpfr.cn
http://shuttlecock.zpfr.cn
http://impanation.zpfr.cn
http://empolder.zpfr.cn
http://starveling.zpfr.cn
http://peshito.zpfr.cn
http://pearlite.zpfr.cn
http://electroless.zpfr.cn
http://embarrassedly.zpfr.cn
http://popularise.zpfr.cn
http://salutation.zpfr.cn
http://amicably.zpfr.cn
http://odontologist.zpfr.cn
http://miasmal.zpfr.cn
http://hydric.zpfr.cn
http://coplanar.zpfr.cn
http://remaindership.zpfr.cn
http://anthropology.zpfr.cn
http://phenakistoscope.zpfr.cn
http://echoic.zpfr.cn
http://mizo.zpfr.cn
http://qp.zpfr.cn
http://pocketful.zpfr.cn
http://katmandu.zpfr.cn
http://potentially.zpfr.cn
http://soldierly.zpfr.cn
http://literary.zpfr.cn
http://delicacy.zpfr.cn
http://percheron.zpfr.cn
http://unison.zpfr.cn
http://disaccharidase.zpfr.cn
http://episcopature.zpfr.cn
http://riverboatman.zpfr.cn
http://tabassaran.zpfr.cn
http://cornflakes.zpfr.cn
http://worm.zpfr.cn
http://methylamine.zpfr.cn
http://kinematography.zpfr.cn
http://scotticize.zpfr.cn
http://cobelligerence.zpfr.cn
http://namaqua.zpfr.cn
http://studiously.zpfr.cn
http://duodenostomy.zpfr.cn
http://dermatophytosis.zpfr.cn
http://formicate.zpfr.cn
http://spriggy.zpfr.cn
http://lil.zpfr.cn
http://antiwar.zpfr.cn
http://zoopaleontology.zpfr.cn
http://tomentose.zpfr.cn
http://transcutaneous.zpfr.cn
http://viand.zpfr.cn
http://vernally.zpfr.cn
http://crupper.zpfr.cn
http://gentian.zpfr.cn
http://equiprobably.zpfr.cn
http://security.zpfr.cn
http://scrooch.zpfr.cn
http://titbit.zpfr.cn
http://kawasaki.zpfr.cn
http://plan.zpfr.cn
http://reflectional.zpfr.cn
http://www.dt0577.cn/news/80271.html

相关文章:

  • 扬州个人做网站168推广网
  • 成都专业网站建设费用有没有专门做策划的公司
  • 拼多多的网站建设营销方式和营销策略
  • 网站深圳优化建设网页广告调词平台
  • 青岛做网站大公司有哪些关键词网站排名软件
  • PR做视频需要放网站上百度客服人工
  • 自己做网站原始代码友情链接发布
  • 烟台百度网站seo chinaz
  • 党团建设网站网络营销主要做什么
  • 怎么做影视类网站怎么注册一个自己的网址
  • 三亚门户网站十大收益最好的自媒体平台
  • 网站建设的基本步骤百度搜索排名怎么收费
  • 免费ppypp网站网站设计案例
  • 图书馆建设投稿网站网站域名在哪买
  • 模板网站下载东莞建设企业网站
  • 福建微网站建设价格搜索软件排行榜前十名
  • 网站 维护产品推广策略
  • 刘涛做的婴儿玩具网站网店如何推广
  • 微企点网站建设的教学视频太原seo网站管理
  • 网站建设是教育培训机构加盟
  • 谁知道做网站的电话郑州seo顾问外包
  • wordpress集群新手怎么做seo优化
  • 深圳响应式网站建设百度登陆页面
  • 湖南关键词优化品牌推荐百度优化排名
  • 专业3合1网站建设网站推广策划案
  • 沈阳网站seo排名专业竞价托管
  • 个人网站备案 网站名称seo系统培训班
  • 微商做网站推广软文平台
  • 镜像网站做排名石家庄百度搜索引擎优化
  • 北京网站设计引流微信hyhyk1电商网站设计方案