-
-
Notifications
You must be signed in to change notification settings - Fork 107
64 Bit Cross Compiler: Installation Instructions
This project now provides exclusive 64-bit ARM64 (aka AArch64) Raspberry Pi GCC Toolchains. These ARM64 can be used on any Linux Distributions (32-bit/64-bit) for cross-compiling programs for any Raspberry Pi 64-Bit OS flavors with 64-bit kernel only (such as Raspbian Buster 64-bit OS and Pi64 by @bamarni).
💡 Note: Our Cross-Compiler toolchains also works out-of-the-box on any Linux distro via WSL2 on Windows 10 Machines. 💯 |
---|
-
Stretch: Generates programs for Raspbian Stretch 64-bit OS (a.k.a Debian Version 9) and any equivalent OS only.
- GCC core libraries version:
- Glibc version: 2.24
- Binutils version: 2.28
- GDB version: 9.2
- GCC core libraries version:
-
Buster: Generates programs for Raspbian Buster 64-bit OS (a.k.a Debian Version 10) and any equivalent OS only.
- GCC core libraries version:
- Glibc version: 2.28
- Binutils version: 2.31
- GDB version: 9.2
- GCC core libraries version:
These toolchains can be used with any Raspberry Pi Models/Versions with ARMV8-A
CPU Architecture that supports 64-Bit execution state. You can find complete all supported Pi's list here.
-
These instructions are exclusively for GCC version 9.2.0 but will work with any compiler version available with this project.
-
These instructions are Linux-machines specific only.
💡 Note: Our Cross-Compiler toolchains also works out-of-the-box on any Linux distro via WSL2 on Windows 10 Machines. 💯
-
Update your environment:
sudo apt update && sudo apt dist-upgrade
-
Install Important Packages:
sudo apt-get install build-essential gawk gcc g++ gfortran git texinfo bison libncurses-dev
Compressed pre-compiled GCC Toolchain binaries can be easily be downloaded from the project's SourceForge Repository by clicking links given in the following table:
References:
- Host OS: on which the toolchain is executed/used.
- Target OS: for which the toolchain generates code.
Toolchains | Host OS | Target OS | Current Status | Precompiled GCC versions available |
---|---|---|---|---|
Raspberry Pi GCC 64-Bit Cross-Compiler Toolchains (Stretch) | any x64/x86 Linux machine | Stretch 64-bit OS (Debian Version 9) only | Stable/Production | 6.3.0, 9.3.0, 10.2.0 |
Raspberry Pi GCC 64-Bit Cross-Compiler Toolchains (Buster) | any x64/x86 Linux machine | Buster 64-bit OS (Debian Version 10) only | Stable/Production | 8.3.0, 9.3.0, 10.2.0 |
These Raspberry toolchains have the same standardized headers with no hardcoded paths, thereby can be directly used for immediate application OR can be installed permanently for on a daily basis usage.
-
Extraction: Extract using
tar
terminal command as follows:tar xf <filename e.g cross-gcc-9.2.0-pi_64.tar.gz>
-
Linking:
PATH=/<extracted folder-name e.g cross-pi-gcc-9.2.0-64>/bin:$PATH LD_LIBRARY_PATH=/<extracted folder-name e.g cross-pi-gcc-9.2.0-64>/lib:$LD_LIBRARY_PATH
-
Extraction: Extract using
tar
terminal command as follows:tar xf <filename e.g cross-gcc-9.2.0-pi_64.tar.gz>
-
Configuring: Move extracted folder to any location (for e.g.
/opt
) by using following command:sudo mv <extracted folder-name e.g cross-pi-gcc-9.2.0-64> /opt
-
Linking: Properly link Path/Environment Variables permanently with either of the following given methods:
-
Appending variables to your
.profile
: (Recommended)echo 'export PATH=/opt/<extracted folder-name e.g cross-pi-gcc-9.2.0-64>/bin:$PATH' >> .profile echo 'export LD_LIBRARY_PATH=/opt/<extracted folder-name e.g cross-pi-gcc-9.2.0-64>/lib:$LD_LIBRARY_PATH' >> .profile source .profile
-
Appending variables to your
.bashrc
:⚠️ Some Linux users reported some trouble with configuring path variables at.profile
that doesn't seem to work for them. If you encounter a similar problem, try setting/configure by adding paths to your.bashrc
file instead of as follows:echo 'export PATH=/opt/<extracted folder-name e.g cross-pi-gcc-9.2.0-64>/bin:$PATH' >> .bashrc echo 'export LD_LIBRARY_PATH=/opt/<extracted folder-name e.g cross-pi-gcc-9.2.0-64>/lib:$LD_LIBRARY_PATH' >> .bashrc source .bashrc
-
-
Cross Compiler CMake Usage Guide for 64-bit Raspberry Pi OSes
-
Step-by-Step Instructions for Cross-Compiling Latest QT Framework for Raspberry Pi.
-
To enable Link-time-optimization (LTO):
export AR="aarch64-linux-gnu-gcc-ar" export CC="aarch64-linux-gnu-gcc" export CXX="aarch64-linux-gnu-g++" export CPP="aarch64-linux-gnu-cpp" export FC="aarch64-linux-gnu-gfortran" export RANLIB="aarch64-linux-gnu-gcc-ranlib" export LD="$CXX" GCCPATH="/<extracted folder-name e.g cross-pi-gcc-9.2.0-1>/libexec/gcc/aarch64-linux-gnu/9.2.0" export ARFLAGS="--plugin $GCCPATH/liblto_plugin.so" export RANLIBFLAGS="--plugin $GCCPATH/liblto_plugin.so"
NOTE: 💡 LTO also needs g++ to be the linker, and it can be enabled at compile-time by setting
-flto=$(nproc)
and-fno-fat-lto-objects
flags in CFLAGS, CXXFLAGS, and LDFLAGS respectively.
If these binaries helped you big time, please consider supporting it. Thank you.
Also, don't forget to share your views & drop a ⭐
- Native-Compiler ARM Toolchains Guide
- Cross-Compiler ARM Toolchains Guide
- Native-Compiler 64-Bit GCC ARM64 Toolchains Guide
- Cross-Compiler 64-Bit GCC ARM64 Toolchains Guide