嵌入式linux学习之交叉编译器安装/使用/问题处理

1.交叉编译器介绍

ARM 裸机、Uboot 移植、Linux 移植这些都需要在 Ubuntu 下进行编译,编译就需要编译器,在 Liux 进行 C 语言开发里面使用 GCC 编译器进行代码编译,但是 Ubuntu 自带的 gcc 编译器是针对 X86 架构的!而我们现在要编译的是 ARM 架构的代码,所以我们需要一个在 X86 架构的 PC 上运行,可以编译 ARM 架构代码的 GCC 编译器,这个编译器就叫做交叉编译器,总结一下交叉编译器就是:
1. 它肯定是一个 GCC 编译器。
2. 这个 GCC 编译器是运行在 X86 架构的 PC 上的。
3. 这个 GCC 编译器是编译 ARM 架构代码的,也就是编译出来的可执行文件是在 ARM 芯片上运行的。
交叉编译器中“交叉”的意思就是在一个架构上编译另外一个架构的代码,相当于两种架构“交叉”起来了。交叉编译器有很多种,ST 也有推荐的通用交叉编译器,一个是 ARM 官方出品的:gcc-arm-9.2-2019.12-x86_64-arm-none-linux-gnueabihf,一个是 linaro 出品的:gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabi.tar.xz,下载地址在https://releases.linaro.org/components/toolchain/binaries/7.5-2019.12/arm-linux-gnueabi/本教程我们使用 ARM 官方出品的交叉编译器。

  1. 首先是下载 ARM 官方出品的交叉编译器,编译器下载地址如下:https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-a/downloads,打开以后如图所示在这里插入图片描述

  2. 在 Ubuntu 中创建目录:/usr/local/arm,

  3. 创建完成以后将刚刚拷贝的交叉编译器复制到/usr/local/arm 这个目录中, 进 入 到 存 放 有 交 叉 编 译 器 的 目 录 ,

  4. 拷贝完成以后在/usr/local/arm 目录中对交叉编译工具进行解压,解压命令如下,也可图形化节点点击解压文件:
    sudo tar -vxf gcc-arm-9.2-2019.12-x86_64-arm-none-linux-gnueabihf.tar.xz

  5. 等待解压完成,解压完成以后会生成一个名为“gcc-arm-9.2-2019.12-x86_64-arm-none-linux-gnueabihf”的文件夹,这个文件夹里面就是我们的交叉编译工具链。

  6. 修改环境变量,使用打开/etc/profile 文件,命令如下:
    sudo vi /etc/profile

  7. 打开/etc/profile 以后,在最后面输入如下所示内容:
    export PATH=$PATH:/usr/local/arm/gcc-arm-9.2-2019.12-x86_64-arm-none-linux-gnueabihf/bin
    添加完成以后的/etc/profile 如图所示
    在这里插入图片描述

  8. 修改好以后就保存退出,重启 Ubuntu 系统,交叉编译工具链(编译器)就安装成功了。

  9. 在使用交叉编译器之前还需要安装一下其它的库,命令如下:
    sudo apt-get update //先更新,否则安装库可能会出错
    sudo apt-get install lsb-core lib32stdc++6 //安装库
    等待这些库安装完成。

2.交叉编译器验证

首先查看一下交叉编译工具的版本号,输入如下命令:
arm-none-linux-gnueabihf-gcc -v
如果交叉编译器安装正确的话就会显示版本号:
在这里插入图片描述
在这里插入图片描述

3. 移植时make编译问题

例如移植nginx:使用./configure …配置好安装目录等,使用make && make install编译安装,其中make使用的编译器实际是读取变量CC和CXX文件,所以执行./configure前export CC=aarch64…-gcc等设定编译器,并且这两个gcc和g++所在bin路径在path环境变量中

使用问题

问题1执行时

  1. 在开发板执行时出现not found

  2. 在这里插入图片描述

  3. 在虚拟机使用编译工具中的readelf命令查看可执行文件,如使用的riscv64-unknown-linux-gnu-gcc编译,则使用riscv64-unknown-linux-gnu-readelf命令查看

在这里插入图片描述

  1. 在Requesting处可看到可执行文件依赖库,去开发板对应位置如/lib/ld*查看是否有库文件,如果没有,则从编译工具文件夹复制或者换编译工具
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值