Maybe aarch64-linux-gnu-gcc is not installed. Try

sudo apt-get install gcc-aarch64-linux-gnu
Answer from user7305360 on Stack Overflow
🌐
Toradex Community
community.toradex.com › technical support
Aarch64-none-linux-gnu-gcc: not found - Technical Support - Toradex Community
July 11, 2024 - Hi, i am using colibri-imx6ull SOM and trying to create the costume linux by using “Build U-Boot From Source Code | Toradex Developer Center” right now i am in the phase of host image creation in host device, while i am trying to follow the same i am facing the following issue lcl@lcl-Latitude-5430:~/workdir/u-boot$ make mrproper /bin/sh: 1: aarch64-none-linux-gnu-gcc: not found make: aarch64-none-linux-gnu-gcc: No such file or directory /bin/sh: 1: aarch64-none-linux-gnu-gcc: not found ...
🌐
GNU
gcc.gnu.org › onlinedocs › gcc › AArch64-Options.html
AArch64 Options (Using the GNU Compiler Collection (GCC))
This option is only intended to be useful when developing GCC. ... Enable or disable PC-relative literal loads. With this option literal pools are accessed using a single instruction and emitted after each function. This limits the maximum size of functions to 1MB. This is enabled by default for -mcmodel=tiny. ... Select the function scope on which return address signing will be applied. Permissible values are ‘none’, which disables return address signing, ‘non-leaf’, which enables pointer signing for functions which are not leaf functions, and ‘all’, which enables pointer signing for all functions.
🌐
Arch Linux
aur.archlinux.org › packages › aarch64-none-linux-gnu-gcc-10.3-bin
AUR (en) - aarch64-none-linux-gnu-gcc-10.3-bin
https://developer.arm.com/-/media/Files/downloads/gnu-a/10.3-2021.07/binrel/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu.tar.xz
🌐
Arch Linux
aur.archlinux.org › packages › aarch64-none-linux-gnu-gcc-12.3-bin
AUR (en) - aarch64-none-linux-gnu-gcc-12.3-bin
https://developer.arm.com/-/media/Files/downloads/gnu/12.3.rel1/binrel/arm-gnu-toolchain-12.3.rel1-x86_64-aarch64-none-linux-gnu.tar.xz · Hi George! All I did was clone your 10.3-bin package and change the download URL and package version to 12.3, because your packages only offered 9.2 and 10.3 and I needed a newer version, but not the newest. Hi! I'm the author of the older packages that this updates, although I was just building incrementally on work from previous packagers, as you can see at https://github.com/georgefst/aarch64-linux-gnu-gcc.
🌐
GitHub
github.com › UWVG › aarch64-none-linux-gnu
GitHub - UWVG/aarch64-none-linux-gnu: gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu(libc-2.31.so: ELF 64-bit LSB shared object, ARM aarch64, version 1 (GNU/Linux), dynamically linked, interpreter /lib/ld-linux-aarch64.so.1, for GNU/Linux 3.7.0, with debug_info, not stripped)
gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu(libc-2.31.so: ELF 64-bit LSB shared object, ARM aarch64, version 1 (GNU/Linux), dynamically linked, interpreter /lib/ld-linux-aarch64.so.1, for GNU/Linux 3.7.0, with debug_info, not stripped) - UWVG/aarch64-none-linux-gnu
Author   UWVG
🌐
Arm Developer
developer.arm.com › downloads › - › arm-gnu-toolchain-downloads
Arm GNU Toolchain Downloads – Arm Developer
aarch64_be-none-linux-gnu-gdb and aarch64_be-none-linux-gnu-gdb-py on Linux hosts requires liblzma.so.5. Toolchains dedicated for Windows host require mingw-w64 library, a complete runtime environment for GCC.
Find elsewhere
🌐
Arm Developer
developer.arm.com › downloads › - › gnu-a
Downloads | GNU-A Downloads – Arm Developer
Toolchains dedicated for Windows host require mingw-w64 library, a complete runtime environment for GCC. The following executables in the Windows hosted toolchains: - aarch64-none-linux-gnu-dwp.exe - aarch64-none-linux-gnu-ld.gold.exe - arm-none-linux-gnueabihf-dwp - arm-none-linux-gnueabihf-ld.gold.exe have additional dependencies on the following dlls: - libwinpthread-1.dll - libgcc_s_sjlj-1.dll - libstdc++-6.dll - libgcc_s_dw2-1.dll You can obtain the required dlls from the MinGW-W64 GCC-8.1.0 packages from SourceForge: - i686-posix-sjlj - i686-posix-dwarf
🌐
Arch Linux
aur.archlinux.org › packages › aarch64-none-elf-gcc-bin
AUR (en) - aarch64-none-elf-gcc-bin - Arch Linux
March 8, 2026 - https://developer.arm.com/-/media/Files/downloads/gnu/14.2.rel1/binrel/arm-gnu-toolchain-14.2.rel1-x86_64-aarch64-none-elf.tar.xz
🌐
Xpack-dev-tools
xpack-dev-tools.github.io › installation guide
Installation Guide | xPack GNU AArch64 Embedded GCC
For older development environments, it is also possible to install xPack GNU AArch64 Embedded GCC only globally in the user's global xPacks store, without any local links/forwarders; it is the developer's responsibility to configure the path to the tools. No other files are installed in any system folders or other locations. xpm install @xpack-dev-tools/aarch64-none-elf-gcc@latest --global --verbose
Top answer
1 of 1
1

(I have the same confusion. And I try to answer it based on my investigation/understanding.)

Possible Naming Schema

According to quote from ARM GNU Toolchain Downloads page, bare metal and Linux are two different targets. And to differentiate from the target architecture, I call it target environment. And my way to tell it is: if it has "linux" in the name, it targets Linux environment, otherwise bare metal.

Available for bare-metal and Linux targets

So I interpret the toolchain names with below schema:

...<host_arch>-<target_arch>-<vendor>-<target_env+abi>
  1. Host OS: on what OS the toolchain itself runs. This is not part of the name but listed in the toolchain download page.

  2. Host Arch: on what machine architecture the toolchain itself runs.

  3. Target Arch: What machine architecture the toolchain's output targets.

  4. Vendor: Who offers the toolchain.

  5. Target Environment: can be bare metal or GNU/Linux.

  6. ABI: things like call conventions for assembly functions. This is related to both architecture and OS (link). So far I have seen: eabi/elf/linux-gnu/linux-gnueabi

About the "target_env+abi" part

I think this is the most confusing part. ABI is related to machine architecture, OS and language (link). And I think below naming convention holds based on the both the Target Arch + Target Environment.

  1. For AArch32 + bare metal, use "eabi".

  2. For AArch64 + bare metal, use "elf". (similar to eabi)

  3. For AArch32 + Linux/GNU, use "linux-gnueabi" (eabi generated by gcc)

  4. For AArch64 + Linux/GNU, use "linux-gnu" (maybe similar to 3 just like 2 to 1)

So I think all 4 of them are about EABI. But may have some subtle differences.

Hope some guru can shed some light here.

Examples

Let's take some toolchain names from the ARM GNU Toolchain Downloads page as examples.

Example 1:
arm-gnu-toolchain-14.2.rel1-mingw-w64-i686-arm-none-eabi.zip

  1. Host Arch = x86-64 because of the "mingw-w64-i686"

  2. Host OS = Windows because listed so.

  3. Target Arch = AArch32 because of the arm.

  4. Target Environment = bare metal because no linux in the name.

  5. Vendor: by open-source community, no specific vendor so it is none.

  6. ABI = eabi

Example 2:
arm-gnu-toolchain-14.2.rel1-mingw-w64-i686-arm-none-linux-gnueabihf.zip

  1. Host Arch = x86-64 because of the "mingw-w64-i686"

  2. Host OS = Windows because listed so.

  3. Target Arch = AArch32 because of the arm.

  4. Target Environment = GNU Linux because of the "linux" in the name.

  5. Vendor: by open-source community, no specific vendor so it is none.

  6. ABI = linux-gnueabi

Example 3:
arm-gnu-toolchain-14.2.rel1-mingw-w64-i686-aarch64-none-elf.zip

  1. Host Arch = x86-64 because of the "mingw-w64-i686"

  2. Host OS = Windows because listed so.

  3. Target Arch = AArch64 because of the "aarch64".

  4. Target Environment = bare metal because no linux in the name.

  5. Vendor: by open-source community, no specific vendor so it is none.

  6. ABI = elf

Example 4:
arm-gnu-toolchain-14.2.rel1-x86_64-arm-none-eabi.tar.xz

  1. Host Arch = x86-64 because of the "x86_64"

  2. Host OS = Linux because listed so.

  3. Target Arch = AArch32 because of the "arm".

  4. Target Environment = bare metal because no linux in the name.

  5. Vendor: by open-source community, no specific vendor so it is none.

  6. ABI = eabi

Example 5:
arm-gnu-toolchain-14.2.rel1-aarch64-aarch64-none-linux-gnu.tar.xz

  1. Host Arch = AArch64 because of the first "aarch64"

  2. Host OS = Linux because listed in Linux-hosted section

  3. Target Arch = AArch64 because of the second "aarch64".

  4. Target Environment = GNU Linux because of the "linux" in the name.

  5. Vendor: by open-source community, no specific vendor so it is none.

  6. ABI = linux-gnu

To answer the original question

  • aarch64-none-elf: is for AArch64 bare metal, vendor is none

  • arm-none-eabi: is for AArch32 bare metal, vendor is none

🌐
Arm Community
community.arm.com › support-forums › f › compilers-and-libraries-forum › 47866 › what-is-the-difference-between-gcc-arm-aarch64-none-linux-gnu-and-gcc-arm-aarch64-none-elf-tool-chains
What is the difference between gcc-arm-aarch64-none- ...
Have a question about working on Arm technology? Browse our support forums for solutions to your questions, answer questions from fellow community members and get help from Arm experts.
🌐
Linux Man Pages
linux.die.net › man › 1 › aarch64-linux-gnu-gcc
aarch64-linux-gnu-gcc(1) - Linux man page
GNU dialect of -std=c++11. Support for C ++ 11 is still experimental, and may change in incompatible ways in future releases. ... The option -fgnu89-inline tells GCC to use the traditional GNU semantics for "inline" functions when in C99 mode. This option is accepted and ignored by GCC versions 4.1.3 up to but not including 4.3.
🌐
GitHub
github.com › xpack-dev-tools › aarch64-none-elf-gcc-xpack
GitHub - xpack-dev-tools/aarch64-none-elf-gcc-xpack: A binary distribution of the AArch64 Embedded GCC toolchain · GitHub
A standalone, cross-platform (Windows, macOS, GNU/Linux) binary distribution of GNU AArch64 Embedded GCC, intended for reproducible builds.
Author   xpack-dev-tools