linaro交叉编译工具链下载与使用笔记

笔记

确定目标 (aarch64)

我的开发环境:Inter的x86_64架构,系统ubuntu20.04
我的目标环境:RK3588的aarch64架构,系统ubuntu20.04,小端(Little Endian)架构

选择版本(7.5)

官方链接:https://releases.linaro.org/components/toolchain/binaries/
在这里插入图片描述
没特殊情况,选择最新版本

选择目标(aarch64-linux-gnu)

在这里插入图片描述

以下是Linaro工具链的下载链接以及代表的版本信息:

我的情况就选:aarch64-linux-gnu

下载地址工具链(gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar.xz)

下载地址:
https://releases.linaro.org/components/toolchain/binaries/latest-7/aarch64-linux-gnu/

这三个文件通常用于交叉编译环境,特别是用于在 x86_64 主机上进行 ARM64(aarch64-linux-gnu)目标平台的交叉编译。以下是这三个文件的作用:

  1. gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar.xz

    • 这是包含 GCC 交叉编译器的压缩文件。该工具链是用于在 x86_64 主机上生成运行在 aarch64-linux-gnu 目标平台(ARM64/Linux)上的可执行文件的工具。
  2. runtime-gcc-linaro-7.5.0-2019.12-aarch64-linux-gnu.tar.xz

    • 此文件可能包含运行时支持的文件,例如共享库(Shared Libraries)等,这些文件是在目标平台(aarch64-linux-gnu)上执行程序时所需的。它提供了在目标平台上运行二进制文件所需的运行时库和支持。
  3. sysroot-glibc-linaro-2.25-2019.12-aarch64-linux-gnu.tar.xz

    • 这个文件包含 Glibc 库的 sysroot。Glibc 是 GNU C 库的一部分,它提供了 C 语言标准库的实现,是 Linux 系统中的一个重要组成部分。sysroot 包含在目标平台(aarch64-linux-gnu)上执行程序所需的头文件、库和其他支持文件。

通常,在交叉编译环境中,交叉编译器用于生成二进制可执行文件,而 runtime 和 sysroot 文件则提供了在目标平台上运行这些生成的可执行文件所需的运行时支持和库。确保这些文件版本与您的项目和目标平台的要求相匹配。

在这里插入图片描述
我这里也只需要下载编译工具链:gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar.xz

解压编译工具链

解压gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar.xz
tar -xvf gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar.xz

$ tree -L 2
.
├── aarch64-linux-gnu
│   ├── bin
│   ├── include
│   ├── lib
│   ├── lib64
│   └── libc
├── bin
│   ├── aarch64-linux-gnu-addr2line
│   ├── aarch64-linux-gnu-ar
│   ├── aarch64-linux-gnu-as
│   ├── aarch64-linux-gnu-c++
│   ├── aarch64-linux-gnu-c++filt
│   ├── aarch64-linux-gnu-cpp
│   ├── aarch64-linux-gnu-dwp
│   ├── aarch64-linux-gnu-elfedit
│   ├── aarch64-linux-gnu-g++
│   ├── aarch64-linux-gnu-gcc
│   ├── aarch64-linux-gnu-gcc-7.5.0
│   ├── aarch64-linux-gnu-gcc-ar
│   ├── aarch64-linux-gnu-gcc-nm
│   ├── aarch64-linux-gnu-gcc-ranlib
│   ├── aarch64-linux-gnu-gcov
│   ├── aarch64-linux-gnu-gcov-dump
│   ├── aarch64-linux-gnu-gcov-tool
│   ├── aarch64-linux-gnu-gdb
│   ├── aarch64-linux-gnu-gdb-add-index
│   ├── aarch64-linux-gnu-gfortran
│   ├── aarch64-linux-gnu-gprof
│   ├── aarch64-linux-gnu-ld
│   ├── aarch64-linux-gnu-ld.bfd
│   ├── aarch64-linux-gnu-ld.gold
│   ├── aarch64-linux-gnu-nm
│   ├── aarch64-linux-gnu-objcopy
│   ├── aarch64-linux-gnu-objdump
│   ├── aarch64-linux-gnu-ranlib
│   ├── aarch64-linux-gnu-readelf
│   ├── aarch64-linux-gnu-size
│   ├── aarch64-linux-gnu-strings
│   └── aarch64-linux-gnu-strip
├── gcc-linaro-7.5.0-2019.12-linux-manifest.txt
├── include
│   ├── gdb
│   ├── gmp.h
│   ├── gmpxx.h
│   ├── mpc.h
│   ├── mpf2mpfr.h
│   └── mpfr.h
├── lib
│   ├── gcc
│   ├── libcc1.so -> libcc1.so.0.0.0
│   ├── libcc1.so.0 -> libcc1.so.0.0.0
│   ├── libcc1.so.0.0.0
│   ├── libgmp.a
│   ├── libgmpxx.a
│   ├── libmpc.a
│   └── libmpfr.a
├── libexec
│   └── gcc
└── share
    ├── doc
    ├── gcc-7.5.0
    ├── gdb
    ├── info
    ├── locale
    └── man

主要使用bin目录中的各种工具替换系统的编译工具

HelloWorld测试

创建一个main.cpp,写个HelloWorld,内容此处省略。
在这里插入图片描述
x86平台上无法运行交叉编译后的程序,使用file命令查看,可以看到是一个aarch64的可执行程序。

工具链其他工具也是可以使用,以此类推

$ /root/workspace/cross_test/cross_build/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-nm main        
                 U abort@@GLIBC_2.17
0000000000411038 B __bss_end__
0000000000411038 B _bss_end__
0000000000411030 B __bss_start
0000000000411030 B __bss_start__
0000000000400578 t call_weak_fn
0000000000411030 b completed.7806
0000000000411020 D __data_start
0000000000411020 W data_start
0000000000400590 t deregister_tm_clones
00000000004005f8 t __do_global_dtors_aux
0000000000410dd0 t __do_global_dtors_aux_fini_array_entry
0000000000411028 D __dso_handle
0000000000410dd8 d _DYNAMIC
0000000000411030 D _edata
0000000000411038 B __end__
0000000000411038 B _end
00000000004006dc T _fini
0000000000400628 t frame_dummy
0000000000410dc8 t __frame_dummy_init_array_entry
0000000000400770 r __FRAME_END__
0000000000410fd8 d _GLOBAL_OFFSET_TABLE_
                 w __gmon_start__
0000000000400718 r __GNU_EH_FRAME_HDR
00000000004004b8 T _init
0000000000410dd0 t __init_array_end
0000000000410dc8 t __init_array_start
00000000004006f0 R _IO_stdin_used
                 w _ITM_deregisterTMCloneTable
                 w _ITM_registerTMCloneTable
00000000004006d8 T __libc_csu_fini
0000000000400658 T __libc_csu_init
                 U __libc_start_main@@GLIBC_2.17
000000000040062c T main
                 U puts@@GLIBC_2.17
00000000004005c0 t register_tm_clones
0000000000400530 T _start
0000000000411030 D __TMC_END__

CMake中配置交叉编译环境

主要配置

# 设置编译器和链接器的路径
set(CMAKE_C_COMPILER "/path/to/embedded-gcc")
set(CMAKE_CXX_COMPILER "/path/to/embedded-g++")
set(CMAKE_LINKER "/path/to/embedded-ld")

# 设置特定的编译和链接标志
set(CMAKE_C_FLAGS "-mcpu=cortex-m3 -mthumb")
set(CMAKE_CXX_FLAGS "-mcpu=cortex-m3 -mthumb")
set(CMAKE_EXE_LINKER_FLAGS "-T/path/to/linker_script.ld")
  • 23
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
从github.com/raspberrypi/tools完整下载的主分支,直接git太慢还容易失败,特意分享出来,实测在Ubuntu 18上安装x64工具可用,gcc版本:4.8.3. 文件300M+,不能上传大于220M的,尝试过解压后分卷,会导致安装有问题,所以直接发一个接,大家去那里下吧。 文件信息: └─tools-master ├─arm-bcm2708 │ ├─arm-bcm2708-linux-gnueabi │ │ ├─arm-bcm2708-linux-gnueabi │ │ │ ├─bin │ │ │ ├─debug-root │ │ │ │ └─usr │ │ │ │ └─bin │ │ │ ├─include │ │ │ │ └─c++ │ │ │ │ └─4.7.1 │ │ │ │ ├─arm-bcm2708-linux-gnueabi │ │ │ │ │ └─bits │ │ │ │ ├─backward │ │ │ │ ├─bits │ │ │ │ ├─debug │ │ │ │ ├─decimal │ │ │ │ ├─ext │ │ │ │ │ └─pb_ds │ │ │ │ │ └─detail │ │ │ │ │ ├─binary_heap_ │ │ │ │ │ ├─binomial_heap_ │ │ │ │ │ ├─binomial_heap_base_ │ │ │ │ │ ├─bin_search_tree_ │ │ │ │ │ ├─branch_policy │ │ │ │ │ ├─cc_hash_table_map_ │ │ │ │ │ ├─eq_fn │ │ │ │ │ ├─gp_hash_table_map_ │ │ │ │ │ ├─hash_fn │ │ │ │ │ ├─left_child_next_sibling_heap_ │ │ │ │ │ ├─list_update_map_ │ │ │ │ │ ├─list_update_policy │ │ │ │ │ ├─ov_tree_map_ │ │ │ │ │ ├─pairing_heap_ │ │ │ │ │ ├─pat_trie_ │ │ │ │ │ ├─rb_tree_map_ │ │ │ │ │ ├─rc_binomial_heap_ │ │ │ │ │ ├─resize_policy │ │ │ │ │ ├─splay_tree_ │ │ │ │ │ ├─thin_heap_ │ │ │ │ │ ├─tree_policy │ │ │ │ │ ├─trie_policy │ │ │ │ │ └─unordered_iterator │ │ │ │ ├─profile │ │ │ │ │ └─impl │ │ │ │ ├─tr1 │ │ │ │ └─tr2 │ │ │ └─sysroot │ │ │ ├─etc │ │ │ ├─lib │ │ │ ├─sbin │ │ │ └─usr │ │ │ ├─bin │ │ │ ├─include │ │ │ │ ├─arpa │ │ │ │ ├─asm │ │ │ │ ├─asm-generic │ │ │ │ ├─bits │ │ │ │ ├─drm │ │ │ │ ├─gnu │ │ │ │ ├─linux │ │ │ │ │ ├─byteorder │ │ │ │ │ ├─caif │ │ │ │ │ ├─can │ │ │ │ │ ├─dvb │ │ │ │ │ ├─hdlc │ │ │ │ │ ├─isdn │ │ │ │ │ ├─mmc │ │ │ │ │ ├─netfilter │ │ │ │ │ │ └─ipset │ │ │ │ │ ├─netfilter_arp │ │ │ │ │ ├─netfilter_bridge │ │ │ │ │ ├─netfilter_ipv4 │ │ │ │ │ ├─netfilter_ipv6 │ │ │ │ │ ├─nfsd │ │ │ │ │ ├─raid │ │ │ │ │ ├─spi │ │ │ │ │ ├─sunrpc │ │ │ │ │ ├─tc_act │ │ │ │ │ ├─tc_ematch │ │ │ │ │ ├─usb │ │ │ │ │ └─wimax │ │ │ │ ├─mtd │ │ │ │ ├─net │ │ │ │ ├─netash │ │ │ │ ├─netatalk │ │ │ │ ├─netax25 │ │ │ │ ├─neteconet │ │ │ │ ├─netinet │ │ │ │ ├─netipx │ │ │ │ ├─netiucv │ │ │ │ ├─netpacket │ │ │ │ ├─netrom │ │ │ │ ├─netrose │ │ │ │ ├─nfs │ │ │ │ ├─protocols │ │ │ │ ├─rdma │ │ │ │ ├─rpc │ │ │ │ ├─rpcsvc │ │ │ │ ├─scsi │ │ │ │ │ └─fc │ │ │ │ ├─sound │ │ │ │ ├─sys │ │ │ │ ├─video │ │ │ │ └─xen │ │ │ ├─lib │ │ │ │ └─gconv │ │ │ ├─libexec │ │ │ ├─sbin │ │ │ └─share │ │ │ ├─i18n │ │ │ │ ├─charmaps │ │ │ │ └─locales │ │ │ └─locale │ │ │ ├─be │ │ │ │ └─LC_MESSAGES │ │ │ ├─bg │ │ │ │ └─LC_MESSAGES │ │ │ ├─ca │ │ │ │ └─LC_MESSAGES │ │ │ ├─cs │ │ │ │ └─LC_MESSAGES │ │ │ ├─da │ │ │ │ └─LC_MESSAGES │ │ │ ├─de │ │ │ │ └─LC_MESSAGES │ │ │ ├─el │ │ │ │ └─LC_MESSAGES │ │ │ ├─en_GB │ │ │ │ └─LC_MESSAGES │ │ │ ├─es │ │ │ │ └─LC_

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值