首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >交叉编译环境的安装

交叉编译环境的安装

作者头像
手撕代码八百里
发布2021-09-26 10:46:56
1.9K0
发布2021-09-26 10:46:56
举报
文章被收录于专栏:猿计划猿计划

什么是交叉编译

我们在Linux中使用自带的gcc和g++编译器进行编译的程序是针对X86架构的。而我们开发板大多都是ARM或者其他架构的开发板,我们就需要编译出针对其他架构的程序。

那么究竟什么是交叉编译呢?

其实就是在我们的PC(X86)上编译出其他平台上的代码,就称它为交叉编译。

想编译出在其它平台上可执行的程序,就需要使用不同的编译器,因为不同的编译器有不同的指令集等。

关于

交叉编译器有很多,我们本次采用linaro公司提供的一个交叉编译工具。

地址:http://releases.linaro.org/

直达地址: http://releases.linaro.org/components/toolchain/binaries/4.9-2017.01/arm-linux-gnueabi/

在这里插入图片描述
在这里插入图片描述

1、下载好之后进行解压:

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

2、把解压后的整个目录拷贝到自己想要存放的地方

我就放在了我统一管理的地方

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、测试是否可以运行

进入到bin目录后,执行./arm-linux-gnueabi-gcc -v 查看版本信息。如果成功了,说明可以了。

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、配置环境变量

如果想直接像系统自带的gcc命令这样随处可以执行的话,就需要配置环境变量。

4-1、记住如下目录

/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、打开配置文件

我们可以选择给系统中的所有用户配置,那么就打开:/etc/profile

如果想给某个特定用户配置,可以打开用户目录下的:

vim ~/.profile
vim ~/.bashrc

等等,都是可以的。

打开:

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

加入:

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

让其生效:

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

测试:

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:~$

那么配置其他版本的也是如此。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-09-25 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 什么是交叉编译
  • 关于
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档