Cross Compile Binutils
The GNU Binutils are a collection of various binary tools such as ld
, as
, objdump
, or readelf
. These tools are platform-specific, so you need to compile them again if your host system and target system are different. In our case, we need ld
and objdump
for the x86_64 architecture.
🔗Building Setup
First, you need to download a current binutils version from here (the latest one is near the bottom). After extracting, you should have a folder named binutils-2.X
where X
is for example 25.1
. Now can create and switch to a new folder for building (recommended):
mkdir build-binutils
cd build-binutils
🔗Configuration
We execute binutils’s configure
and pass a lot of arguments to it (replace the X
with the version number):
../binutils-2.X/configure --target=x86_64-elf --prefix="$HOME/opt/cross" \
--disable-nls --disable-werror \
--disable-gdb --disable-libdecnumber --disable-readline --disable-sim
- The
target
argument specifies the the x86_64 target architecture. - The
prefix
argument selects the installation directory, you can change it if you like. But be careful that you do not overwrite your system’s binutils. - The
disable-nls
flag disables native language support (so you’ll get the same english error messages). It also reduces build dependencies. - The
disable-werror
turns all warnings into errors. - The last line disables features we don’t need to reduce compile time.
🔗Building it
Now we can build and install it to the location supplied as prefix
(it will take a while):
make
make install
Now you should have multiple x86_64-elf-XXX
files in $HOME/opt/cross/bin
.
🔗Adding it to the PATH
To use the tools from the command line easily, you should add the bin
folder to your PATH:
export PATH="$HOME/opt/cross/bin:$PATH"
If you add this line to your e.g. .bashrc
, the x86_64-elf-XXX
commands are always available.