aarch64-linux-gnu_交叉编译工具链

1、.tar.xz 文件

工具链下载:https://mirrors.tuna.tsinghua.edu.cn/armbian-releases/_toolchains/
命令下载:

wget https://mirrors.tuna.tsinghua.edu.cn/armbian-releases/_toolchains/gcc-linaro-6.4.1-2017.11-x86_64_aarch64-linux-gnu.tar.xz

解压
xz -d gcc-linaro-6.4.1-2017.11-x86_64_aarch64-linux-gnu.tar.xz
安装:
mkdir -p /usr/local/tool
安装到指定目录
sudo tar -xvf gcc-linaro-6.4.1-2017.11-x86_64_aarch64-linux-gnu.tar -C /usr/local/tool/

2、添加环境变量

到 ~/.bashrc 文件
PATH=$PATH:/home/txdy827/gcc_sve_aarch64/aarch64-linux-gnu/bin
再用
source ~/.bashrc
使生效
用:
aarch64-linux-gnu-gcc -v
查看版本号:
666

3 参考别人

1、参考1
2、参考2
3、参考3
4、参考4

二、重新安装

1、安装必备软件包:

交叉编译GCC用到的三个软件包:binutils,glibc以及gcc
https://mirrors.nju.edu.cn/gnu/binutils/ ::用的binutils-2.32.tar.xz
https://ftp.gnu.org/gnu/glibc/ ::下载的这个glibc-2.30.tar.xz
https://github.com/gcc-mirror/gcc这个里边的有一个其他分支,选tag,然后下载这个:
https://github.com/gcc-mirror/gcc/tree/releases/gcc-9.2.0

1、1安装必备软件包:

sudo apt update
sudo apt upgrade
sudo apt install build-essential gawk git texinfo bison flex

2、新建路径:

mkdir -p /home/txdy827/sur/GNU/mk_cross_compiler/
cd /home/txdy827/sur/GNU/mk_cross_compiler

在mk_cross_compiler目录下新建code目录,把刚才那3个包解压缩到code路径下,
然后.tar.xz文件的处理方式是:两步解压:
第一步:xz -d file.tar.xz 先解压成.tar文件,
第二部 tar -xvf file.tar 就会生成相关的解压之后的目录了
还可以在解压时候指定解压到哪一个路径:如( tar -xvf file.tar -C /usr/local/)

解压之后会在/home/txdy827/src/GNU/mk_cross_compiler/code/目录下生成这3个包的相关目录。

3、在3个解压之后的目录中再分别新建一个用来./configure配置 和make编译这3个库的的文件夹

因为编译这3个库的时候,如果直接在解压之后的文件夹下直接./configure配置,make编译,在后边会出现错误,原因是不能在该文件夹下直接./configure配置

cd /home/txdy827/src/GNU/mk_cross_compiler/code/gcc-9.2.0
mkdir gcc-build

cd /home/txdy827/src/GNU/mk_cross_compiler/code/binutils-2.32
mkdir binutils-build

cd /home/txdy827/src/GNU/mk_cross_compiler/code/glibc-2.30
mkdir glibc-build

#(创建存放交叉编译可执行程序的路径,并加入PATH中)
创建一个用来指定编译成功的目标的文件夹:
cd  /home/txdy827/src/GNU/mk_cross_compiler
mkdir cross-gcc
在~/.bashrc文件中添加
PATH=$PATH:/home/txdy827/src/GNU/mk_cross_compiler/cross-gcc/bin
再source ~/.bashrc 使生效

4、在gcc源码包下载依赖的软件包

cd code/gcc-9_2_0/
./contrib/download_prerequisites

6、安装内核头文件,这样将来就可以用自己的交叉编译工具编译调用对应kernel的系统调用的应用程序

因为自己的内核文件不好用(在/usr/src/目录下,有好几个内核文件),就又网上下载了内核源文件:linux-5.4.55.tar.xz,然后解压进去解压之后的目录,在此处操作:

make ARCH=arm64 INSTALL_HDR_PATH=/home/txdy827/usr/GNU/mk_cross_compiler/cross-gcc/aarch64-linux-gnu headers_install

这一步骤会在cross-gcc目录下生成aarch64-linux-gnu目录,此目录下会有include目录,里边是一些头文件

7、编译安装binutils

cd到刚才第3步创建的目录中(此目录就是为了配置,编译用的,代码和编译要在不同的文件夹下,规定的,不然就是不行0:

cd /home/txdy827/src/GNU/mk_cross_compiler/code/binutils-2.32/binutils-build

../configure --prefix=/home/txdy827/src/GNU/mk_cross_compiler/cross-gcc --target=aarch64-linux-gnu --disable-multilib --with-arch=armv8

make -j8 //8个核一起编译
make install

此步骤执行之后:
会在cross-gcc 目录下生成 bin、share文件夹

下面开始编译glibc和gcc,由于这两个相互依赖,所以我们先部分编译gcc,然后部分编译glibc,最后全部编译gcc和glibc。

8、部分编译gcc

cd /home/txdy827/src/GNU/mk_cross_compiler/code/gcc-9.2.0/gcc-build

../configure --prefix=/home/txdy827/usr/GNU/mk_cross_compiler/cross-gcc --target=aarch64-linux-gnu --enable-languages=c,c++ --disable-multilib
make all-gcc -j8
make install-gcc

9、部分编译glibc

cd /home/txdy827/src/GNU/mk_cross_compiler/code/glibc-2.30/glibc-build

../configure --prefix=/home/txdy827/src/GNU/mk_cross_compiler/cross-gcc/aarch64-linux-gnu --build=$MACHINE --host=aarch64-linux-gnu --target=aarch64-linux-gnu --with-headers=/home/txdy827/src/GNU/mk_cross_compiler/cross-gcc/aarch64-linux-gnu/include --disable-multilib libc_cv_forced_unwind=yes

make install-bootstrap-headers=yes install-headers

make -j8 csu/subdir_lib

install csu/crt1.o csu/crti.o csu/crtn.o  /home/txdy827/src/GNU/mk_cross_compiler/cross-gcc/aarch64-linux-gnu/lib  //在库生成有.o文件

aarch64-linux-gnu-gcc -nostdlib -nostartfiles -shared -x c /dev/null -o /home/txdy827/src/GNU/mk_cross_compiler/cross-gcc/aarch64-linux-gnu/lib/libc.so  //编译生成动态库

touch /home/txdy827/src/GNU/mk_cross_compiler/cross-gcc/aarch64-linux-gnu/include/gnu/stubs.h

10、修改GCC 9.2的源码,否则编译会报错

修改/home/txdy827/src/GNU/mk_cross_compiler/code/gcc-9_2_0/libsanitizer/asan/asan_linux.cc,在第77行加入如下代码:

#ifndef PATH_MAX
#define PATH_MAX 4096
#endif

11、接着部分编译gcc

回到刚才那个gcc-build文件夹下执行

make -j8 all-target-libgcc
make install-target-libgcc

12、全编译glibc

回到刚才的glibc-build文件夹下执行

make -j8
make install

13、全编译gcc

回到刚才那个gcc-build文件夹下执行

make -j8 all-target-libgcc
make install-target-libgcc

14、测试

$ aarch64-linux-gnu-gcc -v
使用内建 specs。
COLLECT_GCC=aarch64-linux-gnu-gcc
COLLECT_LTO_WRAPPER=/home/txdy827/src/GNU/mk_cross_compiler/cross-gcc/libexec/gcc/aarch64-linux-gnu/9.2.0/lto-wrapper
目标:aarch64-linux-gnu
配置为:../configure --prefix=/home/txdy827/src/GNU/mk_cross_compiler/cross-gcc --target=aarch64-linux-gnu --enable-languages=c,c++ --disable-multilib
线程模型:posix
gcc 版本 9.2.0 (GCC) 
txdy827@ubuntu:~/src/GN

编写一个hello.c文件:

#include <stdio.h>

int main(int argc, const char *argv[])
{
        printf("Hello World\n");
        return 0;
}

编译:

$ aarch64-linux-gnu-gcc --static hello_world.c -o hello_world

执行:
需要先下载一个执行的模拟平台:

sudo apt install qemu-user

再执行:
$ qemu-aarch64 ./hello_world
就对了

  • 6
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: aarch64-linux-gnu交叉编译是指在x86或其他架构的电脑上,通过交叉工具链,将代码编译为适用于ARM64架构的可执行文件。在开发ARM64架构的应用程序时,我们可以通过交叉编译工具链,将开发环境迁移到x86或其他架构的电脑上,使得开发变得更加便捷。 aarch64-linux-gnu交叉编译的过程一般包括以下步骤: 1. 安装交叉编译工具链:可以通过下载对应的工具链来安装,例如使用apt-get install gcc-aarch64-linux-gnu (Ubuntu系统) 或yum install gcc-aarch64-linux-gnu (CentOS系统)来安装。 2. 编写应用程序源代码:开发人员根据需求编写应用程序源代码。 3. 使用交叉编译工具编译可执行文件:在Linux终端下,输入交叉编译工具链的路径与对应的编译选项,对应的可执行文件就会生成。 4. 上传可执行文件到ARM64服务器:最后,将编译好的可执行文件上传到ARM64服务器上即可完成部署。 通过aarch64-linux-gnu交叉编译,可以为ARM64架构的应用开发提供更为方便和高效的开发环境。同时,通过与开源社区的交流与合作,可以不断地改进和完善交叉编译工具链。 ### 回答2: Aarch64-linux-gnu交叉编译是将一组程序代码从一种CPU及操作系统架构编译成另一种CPU及操作系统架构的过程。在这种情况下,原始代码是针对ARM 64位体系结构和Linux操作系统编写的,但是需要将其编译成可以在不同体系结构和操作系统下运行的代码。 这种编译称为交叉编译,目的是让程序能够在ARM架构的设备上运行。 Aarch64-linux-gnu交叉编译通常用于在PC上为ARM架构的设备编写软件。它的目的是为开发者提供在开发环境中使用强大的桌面工具来编程,而不需要在设备上进行编程。这使得程序编写和测试更加高效。此外,交叉编译还允许在使用不同操作系统(如Mac或Windows)的计算机上开发应用程序,这样就可以在处理器体系结构不同或使用不同的操作系统的多个设备上运行相同的程序。 Aarch64-linux-gnu交叉编译需要建立交叉编译环境,即要在一个主机上安装交叉编译器,可以使用gcc工具链,同时还需要安装一些与目标体系结构有关的库和头文件。这些库和头文件通常是在目标体系结构的官方开发工具包中提供的。 进行Aarch64-linux-gnu交叉编译的本质是让开发人员能够在不同环境之间快速迁移代码和数据,满足快速开发和部署的需求。它为开发人员带来更多的便利,让他们不再局限于一个特定的平台,同时也能够加速代码开发过程,从而使开发者可以更快地发布产品和服务。 ### 回答3: aarch64-linux-gnu是指基于Aarch64架构的Linux系统,而交叉编译则是指在一台机器上编译出另一种不同架构的可执行程序。 在进行aarch64-linux-gnu交叉编译时,需要首先安装对应的交叉编译工具链,这个工具链应该包含对ARM Aarch64架构的交叉编译器、库文件等。具体安装方法可以参照相应的文档或者使用包管理器安装。 安装好交叉编译工具链之后,就可以开始编写代码并进行交叉编译了。在编写代码时,需要注意一些与不同架构相关的问题。例如,需要注意对齐方式、字节序等问题。同时,也需要在Makefile或者其他编译脚本中指定交叉编译器的路径,并设置好编译选项。 最后,进行交叉编译时需要选择要编译的目标架构并指定交叉编译器以及库文件的位置。编译完成后,可以将生成的可执行程序拷贝到目标机器上进行运行。 总之,aarch64-linux-gnu交叉编译需要准备好对应的工具链,注意编写代码时与不同架构相关的问题,设置好编译选项和路径,最后进行交叉编译并将生成的可执行文件拷贝到目标机器上即可。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值