Installation of cross-compilation environment

what is cross compilation

The programs we compile in Linux using the built-in gcc and g++ compilers are for the X86 architecture. Most of our development boards are development boards of ARM or other architectures, and we need to compile programs for other architectures.

So what exactly is cross compilation?

In fact, it is to compile the code on other platforms on our PC (X86), which is called cross-compilation.

If you want to compile programs executable on other platforms, you need to use different compilers, because different compilers have different instruction sets.

about

There are many cross compilers, this time we use a cross compilation tool provided by linaro company.

Address: http://releases.linaro.org/

Direct link:
http://releases.linaro.org/components/toolchain/binaries/4.9-2017.01/arm-linux-gnueabi/

insert image description here

1. After downloading, unzip it:

tar -xvf gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabi.tar.xz

2. Copy the entire unzipped directory to the place you want to store it

I put it in my unified management place

mv gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabi ~/soft/linux_tools/
zh@zh-lpc:~/soft/linux_tools$ pwd
/home/zh/soft/linux_tools
zh@zh-lpc:~/soft/linux_tools$ ls
gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabi
zh@zh-lpc:~/soft/linux_tools$

3. Test whether it can be run

After entering the bin directory, execute ./arm-linux-gnueabi-gcc -v to view the version information. If it is successful, it is OK.

zh@zh-lpc:~/soft/linux_tools$
zh@zh-lpc:~/soft/linux_tools$ cd gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabi/
zh@zh-lpc:~/soft/linux_tools/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabi$ cd bin/
zh@zh-lpc:~/soft/linux_tools/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabi/bin$
zh@zh-lpc:~/soft/linux_tools/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabi/bin$
zh@zh-lpc:~/soft/linux_tools/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabi/bin$ pwd
/home/zh/soft/linux_tools/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabi/bin
zh@zh-lpc:~/soft/linux_tools/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabi/bin$ ls
arm-linux-gnueabi-addr2line  arm-linux-gnueabi-cpp        arm-linux-gnueabi-gcc-ar      arm-linux-gnueabi-gfortran  arm-linux-gnueabi-objcopy  arm-linux-gnueabi-strings
arm-linux-gnueabi-ar         arm-linux-gnueabi-elfedit    arm-linux-gnueabi-gcc-nm      arm-linux-gnueabi-gprof     arm-linux-gnueabi-objdump  arm-linux-gnueabi-strip
arm-linux-gnueabi-as         arm-linux-gnueabi-g++        arm-linux-gnueabi-gcc-ranlib  arm-linux-gnueabi-ld        arm-linux-gnueabi-ranlib   gdbserver
arm-linux-gnueabi-c++        arm-linux-gnueabi-gcc        arm-linux-gnueabi-gcov        arm-linux-gnueabi-ld.bfd    arm-linux-gnueabi-readelf  runtest
arm-linux-gnueabi-c++filt    arm-linux-gnueabi-gcc-4.9.4  arm-linux-gnueabi-gdb         arm-linux-gnueabi-nm        arm-linux-gnueabi-size
zh@zh-lpc:~/soft/linux_tools/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabi/bin$
zh@zh-lpc:~/soft/linux_tools/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabi/bin$ ./arm-linux-gnueabi-gcc -v
使用内建 specs。
COLLECT_GCC=./arm-linux-gnueabi-gcc
COLLECT_LTO_WRAPPER=/home/zh/soft/linux_tools/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabi/bin/../libexec/gcc/arm-linux-gnueabi/4.9.4/lto-wrapper
目标:arm-linux-gnueabi
配置为:/home/tcwg-buildslave/workspace/tcwg-make-release/label/docker-trusty-amd64-tcwg-build/target/arm-linux-gnueabi/snapshots/gcc-linaro-4.9-2017.01/configure SHELL=/bin/bash --with-mpc=/home/tcwg-buildslave/workspace/tcwg-make-release/label/docker-trusty-amd64-tcwg-build/target/arm-linux-gnueabi/_build/builds/destdir/x86_64-unknown-linux-gnu --with-mpfr=/home/tcwg-buildslave/workspace/tcwg-make-release/label/docker-trusty-amd64-tcwg-build/target/arm-linux-gnueabi/_build/builds/destdir/x86_64-unknown-linux-gnu --with-gmp=/home/tcwg-buildslave/workspace/tcwg-make-release/label/docker-trusty-amd64-tcwg-build/target/arm-linux-gnueabi/_build/builds/destdir/x86_64-unknown-linux-gnu --with-gnu-as --with-gnu-ld --disable-libmudflap --enable-lto --enable-objc-gc --enable-shared --without-included-gettext --enable-nls --disable-sjlj-exceptions --enable-gnu-unique-object --enable-linker-build-id --disable-libstdcxx-pch --enable-c99 --enable-clocale=gnu --enable-libstdcxx-debug --enable-long-long --with-cloog=no --with-ppl=no --with-isl=no --disable-multilib --with-float=soft --with-mode=thumb --with-tune=cortex-a9 --with-arch=armv7-a --with-fpu=vfpv3-d16 --enable-threads=posix --enable-multiarch --enable-libstdcxx-time=yes --with-build-sysroot=/home/tcwg-buildslave/workspace/tcwg-make-release/label/docker-trusty-amd64-tcwg-build/target/arm-linux-gnueabi/_build/sysroots/arm-linux-gnueabi --with-sysroot=/home/tcwg-buildslave/workspace/tcwg-make-release/label/docker-trusty-amd64-tcwg-build/target/arm-linux-gnueabi/_build/builds/destdir/x86_64-unknown-linux-gnu/arm-linux-gnueabi/libc --enable-checking=release --disable-bootstrap --enable-languages=c,c++,fortran,lto --build=x86_64-unknown-linux-gnu --host=x86_64-unknown-linux-gnu --target=arm-linux-gnueabi --prefix=/home/tcwg-buildslave/workspace/tcwg-make-release/label/docker-trusty-amd64-tcwg-build/target/arm-linux-gnueabi/_build/builds/destdir/x86_64-unknown-linux-gnu
线程模型:posix
gcc 版本 4.9.4 (Linaro GCC 4.9-2017.01)
zh@zh-lpc:~/soft/linux_tools/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabi/bin$

4. Configure environment variables

If you want to be able to execute it anywhere directly like the gcc command that comes with the system, you need to configure environment variables.

4-1, remember the following directory

/home/zh/soft/linux_tools/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabi/bin

zh@zh-lpc:~/soft/linux_tools/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabi/bin$ pwd
/home/zh/soft/linux_tools/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabi/bin
zh@zh-lpc:~/soft/linux_tools/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabi/bin$

4-2. Open the configuration file

We can choose to configure all users in the system, then open: /etc/profile

If you want to configure a specific user, you can open the user directory:

vim ~/.profile
vim ~/.bashrc

Wait, it's all possible.

Open:

zh@zh-lpc:~$ vim ~/.bashrc
zh@zh-lpc:~$

join in:


export ARCH=arm
export CROSS_COMPILE=arm-linux-gnueabihf-
export PATH=$PATH:/home/zh/soft/linux_tools/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabi/bin

Make it work:

zh@zh-lpc:~$ source ~/.bashrc
zh@zh-lpc:~$

test:

zh@zh-lpc:~$
zh@zh-lpc:~$ arm-linux-gnueabi
arm-linux-gnueabi-addr2line     arm-linux-gnueabi-gcc-ar        arm-linux-gnueabihf-c++         arm-linux-gnueabihf-gcc-ranlib  arm-linux-gnueabihf-objcopy     arm-linux-gnueabi-objcopy
arm-linux-gnueabi-ar            arm-linux-gnueabi-gcc-nm        arm-linux-gnueabihf-c++filt     arm-linux-gnueabihf-gcov        arm-linux-gnueabihf-objdump     arm-linux-gnueabi-objdump
arm-linux-gnueabi-as            arm-linux-gnueabi-gcc-ranlib    arm-linux-gnueabihf-cpp         arm-linux-gnueabihf-gcov-tool   arm-linux-gnueabihf-ranlib      arm-linux-gnueabi-ranlib
arm-linux-gnueabi-c++           arm-linux-gnueabi-gcov          arm-linux-gnueabihf-dwp         arm-linux-gnueabihf-gdb         arm-linux-gnueabihf-readelf     arm-linux-gnueabi-readelf
arm-linux-gnueabi-c++filt       arm-linux-gnueabi-gdb           arm-linux-gnueabihf-elfedit     arm-linux-gnueabihf-gfortran    arm-linux-gnueabihf-size        arm-linux-gnueabi-size
arm-linux-gnueabi-cpp           arm-linux-gnueabi-gfortran      arm-linux-gnueabihf-g++         arm-linux-gnueabihf-gprof       arm-linux-gnueabihf-strings     arm-linux-gnueabi-strings
arm-linux-gnueabi-elfedit       arm-linux-gnueabi-gprof         arm-linux-gnueabihf-gcc         arm-linux-gnueabihf-ld          arm-linux-gnueabihf-strip       arm-linux-gnueabi-strip
arm-linux-gnueabi-g++           arm-linux-gnueabihf-addr2line   arm-linux-gnueabihf-gcc-6.2.1   arm-linux-gnueabihf-ld.bfd      arm-linux-gnueabi-ld
arm-linux-gnueabi-gcc           arm-linux-gnueabihf-ar          arm-linux-gnueabihf-gcc-ar      arm-linux-gnueabihf-ld.gold     arm-linux-gnueabi-ld.bfd
arm-linux-gnueabi-gcc-4.9.4     arm-linux-gnueabihf-as          arm-linux-gnueabihf-gcc-nm      arm-linux-gnueabihf-nm          arm-linux-gnueabi-nm
zh@zh-lpc:~$ arm-linux-gnueabi-gcc -v
使用内建 specs。
COLLECT_GCC=arm-linux-gnueabi-gcc
COLLECT_LTO_WRAPPER=/home/zh/soft/linux_tools/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabi/bin/../libexec/gcc/arm-linux-gnueabi/4.9.4/lto-wrapper
目标:arm-linux-gnueabi
配置为:/home/tcwg-buildslave/workspace/tcwg-make-release/label/docker-trusty-amd64-tcwg-build/target/arm-linux-gnueabi/snapshots/gcc-linaro-4.9-2017.01/configure SHELL=/bin/bash --with-mpc=/home/tcwg-buildslave/workspace/tcwg-make-release/label/docker-trusty-amd64-tcwg-build/target/arm-linux-gnueabi/_build/builds/destdir/x86_64-unknown-linux-gnu --with-mpfr=/home/tcwg-buildslave/workspace/tcwg-make-release/label/docker-trusty-amd64-tcwg-build/target/arm-linux-gnueabi/_build/builds/destdir/x86_64-unknown-linux-gnu --with-gmp=/home/tcwg-buildslave/workspace/tcwg-make-release/label/docker-trusty-amd64-tcwg-build/target/arm-linux-gnueabi/_build/builds/destdir/x86_64-unknown-linux-gnu --with-gnu-as --with-gnu-ld --disable-libmudflap --enable-lto --enable-objc-gc --enable-shared --without-included-gettext --enable-nls --disable-sjlj-exceptions --enable-gnu-unique-object --enable-linker-build-id --disable-libstdcxx-pch --enable-c99 --enable-clocale=gnu --enable-libstdcxx-debug --enable-long-long --with-cloog=no --with-ppl=no --with-isl=no --disable-multilib --with-float=soft --with-mode=thumb --with-tune=cortex-a9 --with-arch=armv7-a --with-fpu=vfpv3-d16 --enable-threads=posix --enable-multiarch --enable-libstdcxx-time=yes --with-build-sysroot=/home/tcwg-buildslave/workspace/tcwg-make-release/label/docker-trusty-amd64-tcwg-build/target/arm-linux-gnueabi/_build/sysroots/arm-linux-gnueabi --with-sysroot=/home/tcwg-buildslave/workspace/tcwg-make-release/label/docker-trusty-amd64-tcwg-build/target/arm-linux-gnueabi/_build/builds/destdir/x86_64-unknown-linux-gnu/arm-linux-gnueabi/libc --enable-checking=release --disable-bootstrap --enable-languages=c,c++,fortran,lto --build=x86_64-unknown-linux-gnu --host=x86_64-unknown-linux-gnu --target=arm-linux-gnueabi --prefix=/home/tcwg-buildslave/workspace/tcwg-make-release/label/docker-trusty-amd64-tcwg-build/target/arm-linux-gnueabi/_build/builds/destdir/x86_64-unknown-linux-gnu
线程模型:posix
gcc 版本 4.9.4 (Linaro GCC 4.9-2017.01)
zh@zh-lpc:~$

Then configure other versions as well.

Guess you like

Origin blog.csdn.net/qq_17623363/article/details/120465018