arm-linux-gnueabihf gcc8.3交叉编译工具搭建教程

一、运行环境

1.1  执行机环境

ld

GNU ld (GNU Binutils for Raspbian) 2.31.1

ldd

ldd (Debian GLIBC 2.28-10+rpi1) 2.28   Copyright (C) 2018 Free Software Foundation, Inc.

gcc

(Raspbian 8.3.0-6+rpi1) 8.3.0   Copyright (C) 2018 Free Software Foundation, Inc.

arm

ARMv7 ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-armhf.so.3, for GNU/Linux 3.2.0

1.2  交叉编译机环境

Linux 桌面系统 Ubuntu 16.04.4 LTS

二、编译步骤

2.1  用户目录下新建gcc_all文件夹,下载binutils-2.31.tar.bz2  gcc-8.3.0.tar.gz  glibc-2.28.tar.bz2  linux。

cd ~
mkdir gcc_all && cd gcc_all
wget https://ftpmirror.gnu.org/binutils/binutils-2.31.tar.bz2
wget https://ftpmirror.gnu.org/glibc/glibc-2.28.tar.bz2
wget https://ftpmirror.gnu.org/gcc/gcc-8.3.0/gcc-8.3.0.tar.gz
git clone --depth=1 https://github.com/raspberrypi/linux

2.2  提取所有压缩文件

tar xf binutils-2.31.tar.bz2
tar xf glibc-2.28.tar.bz2
tar xf gcc-8.3.0.tar.gz
rm *.tar.*

2.3 下载GCC8.3需要的一些资源文件到源码中,删除没用的压缩包

cd gcc-8.3.0
contrib/download_prerequisites
rm *.tar.*

2.4 创建交叉编译的安装文件夹,并添加到PATH路径中

cd ~/gcc_all
sudo mkdir -p /opt/cross-pi-gcc
sudo chown $USER /opt/cross-pi-gcc
export PATH=/opt/cross-pi-gcc/bin:$PATH

2.5 安装Linux内核头文件到交叉编译安装文件夹

cd ~/gcc_all
cd linux
KERNEL=kernel7make ARCH=arm INSTALL_HDR_PATH=/opt/cross-pi-gcc/arm-linux-gnueabihf headers_install

2.6 编译安装Binutils 2.31

cd ~/gcc_all
mkdir build-binutils && cd build-binutils../binutils-2.31/configure --prefix=/opt/cross-pi-gcc --target=arm-linux-gnueabihf --with-arch=armv6 --with-fpu=vfp --with-float=hard --disable-multilibmake -j8
make install

2.7 编译安装GCC

cd ~/gcc_all
mkdir build-gcc && cd build-gcc../gcc-8.3.0/configure --prefix=/opt/cross-pi-gcc --target=arm-linux-gnueabihf --enable-languages=c,c++,fortran --with-arch=armv6 --with-fpu=vfp --with-float=hard --disable-multilibmake -j8 all-gcc
make install-gcc

2.8 编译安装glibc2.28

cd ~/gcc_all
mkdir build-glibc && cd build-glibc../glibc-2.28/configure --prefix=/opt/cross-pi-gcc/arm-linux-gnueabihf --build=$MACHTYPE --host=arm-linux-gnueabihf --target=arm-linux-gnueabihf --with-arch=armv6 --with-fpu=vfp --with-float=hard --with-headers=/opt/cross-pi-gcc/arm-linux-gnueabihf/include --disable-multilib libc_cv_forced_unwind=yesmake install-bootstrap-headers=yes install-headersmake -j8 csu/subdir_libinstall csu/crt1.o csu/crti.o csu/crtn.o /opt/cross-pi-gcc/arm-linux-gnueabihf/libarm-linux-gnueabihf-gcc -nostdlib -nostartfiles -shared -x c /dev/null -o /opt/cross-pi-gcc/arm-linux-gnueabihf/lib/libc.sotouch /opt/cross-pi-gcc/arm-linux-gnueabihf/include/gnu/stubs.h
错误处理:* LD_LIBRARY_PATH shouldn’t contain the current directory when
* building glibc. Please change theenvironment variable
* and run configure again.
解决:记录LD_LIBRARY_PATH的值(echo $ LD_LIBRARY_PATH=),清空该变量(# LD_LIBRARY_PATH=),编译安装结束后重新添加。

2.9 回到GCC编译安装libgcc

cd ..
cd build-gcc
make -j8 all-target-libgcc
make install-target-libgcc

2.10 结束安装Glibc

cd ..
cd build-glibc
make -j8
make install

2.11 最后完成安装GCC8.3.0

cd ..
cd build-gcc
make -j8
make install
cd ..

安装完成后系统中存在arm-linux-gnueabihf-gcc-8.3.0。可在控制命令中查到:

三、测试

新建一个test.c文件如下:

#include “stdio.h”
int main()
{printf(“test arm-linux-gnueabihf cross-compile-tools\r\n”);return 0;
}

执行编译:

arm-linux-gnueabihf-gcc test.c -o out

查看编译信息:

file out
out: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-armhf.so.3, for GNU/Linux 3.2.0, not stripped

编译完成。

四、参考

Building GCC as a cross compiler for Raspberry Pi:https://solarianprogrammer.com/2018/05/06/building-gcc-cross-compiler-raspberry-pi/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/404967.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux tcpdump命令详解

From: http://www.cnblogs.com/ggjucheng/archive/2012/01/14/2322659.html 简介 用简单的话来定义tcpdump,就是:dump the traffic on a network,根据使用者的定义对网络上的数据包进行截获的包分析工具。 tcpdump可以将网络中传送的数据包…

Win7 64bit系统下未能加载文件或程序集“System.Data.SQLite”的另一解决办法

在http://www.cnblogs.com/downcom/archive/2009/10/26/1590120.html中我曾给出一种解决方法,但这种方法在本地用64位系统开发程序,但服务器却是使用的32位的系统时却是很麻烦的,一直得改来改去的,今天使用另一种解决方法。 1、打…

整理一下网上看到的几个巧妙小电路

1、单按键开关机电路 思路:按下按键后,MCU输出开机信号PG1,关机则检测KEY1的电平,关键是二极管构成“或”的电路。 2、USB和电池供电切换电路 思路:USB有电则断开电池供电回路,用P-MOS管实现 3、快速放电…

hdu 3951 硬币围成一圈(博弈)

n个硬币围成一个环 每次只能取1-K个硬币 最后取完者胜 假如5个硬币 每次取1-2个情况1 先手取1个 后手取剩下4个中间2个 破坏了连续 虽然最后剩2个,但先手只能取一个 然后后再取一个 后手胜 情况2 先手取2个 后手取剩下3个中间的那1个 然后同理 后手胜 Sample Input2…

socket初级使用(客户端)

在国庆这段时间里用零星的一些时间看了一下socket的学习资料,由于笔者偏向学习实用方面的内容,因此此篇文章涉及理论知识较少,主要是以实现思路(怎么做)为主,但在实现之前还是需要了解一些基础的理论知识(如果其中有误请指出) TCP是用socket来…

第11章 路由器OSPF动态路由配置

实验目标: 一、掌握OSPF协议的配置方法; 二、掌握查看通过动态路由协议OSPF学习产生的路由信息; 三、熟悉广域网线缆连接方式; 技术原理: OSFP开放式最短路径优先协议,是目前网络中最广泛的路由协议之一。属…

Hi3515的开发板 Hi3515 SDK编译出错 提示缺少libpciv.a的解决办法

From: http://zyd87818.blog.163.com/blog/static/17488150120124300261687/ 这是HI3515说明文档的说明 但是我进去编译却通不过,提示错误如下 通过qq群里的好人帮助解决方法如下首先看一下makefile自己看不懂,经高人指点需要修改Makefile.param文件…

poj1222

题意:一个01矩阵,表示灯的亮灭状态,每次操作可以改变一个十字形状内的五个灯的状态。问能否将所有灯熄灭。 分析:高斯消元法 对于每个灯的两灭有影响的开关就是它附近十字形内的五个开关。所以对于每个灯可以列一个方程&#xff0…

iphone开发我的新浪微博客户端-用户登录准备篇(1.1)

首先说一下我这个的实现思路,登录支持多个账号,也就是说可以保存多个微博账号登录的时候选择其中一个登录。多个账号信息保存在sqlite的数据库中, 每一个账号信息就是一条记录, 当用户启动微博客户端的时候去取保存在sqlite数据库中的账号记录…

基于密度的异常值检测方法整理

基于密度的异常值检测方法的原理认为正常样本点所处的类簇密度要高于异常点样本所处的类簇密度。为解决实际异常值检测情况 中出现的问题,有一种基于局部异常因子 LOF 方法。

GWT 入门介绍

From: http://blog.csdn.net/struts2/article/details/1758122 GWT 入门介绍 GWT使用JSON格式的数据通讯 GWT是 Google Web Toolkit的简称。 GWT是一个以Java语言为工具,以类似Swing的方式编写UI组件,之后通过GWT Compiler编译 为JavaScritp和HTM…

SQL Server 2008空间数据应用系列十一:Bing Maps中呈现GeoRSS订阅的空间数据

友情提示,您阅读本篇博文的先决条件如下: 1、本文示例基于Microsoft SQL Server 2008 R2调测。 2、具备 Transact-SQL 编程经验和使用 SQL Server Management Studio 的经验。 3、熟悉或了解Microsoft SQL Server 2008中的空间数据类型。 4、具备相应&am…

聚类算法的分类整理

1、基于划分的聚类算法 基于划分的聚类算法 主要通过聚类中心的迭代重置,直到达到“簇内点足够近,簇间点足够远”的目标效果,完成样本集的最优化分。其算法优点是时间、空间复杂度低,可以处理大规模数据集。缺点包括容易陷入局部…

minGW64安装和使用 极简教程

1、下载minGW64 官网下载:https://sourceforge.net/projects/mingw-w64/files/mingw-w64/mingw-w64-release/我的FTP:a、minGW64 install.exe b、解压免安装版 2、解压 3、添加环境变量 4、CMD 运行gcc 安装完成。 5、使用minGW编译C源码 6、运行

[C#反编译教程]001.Reflector.NET反编译工具 v8.5绿色版+注册机+注册教程

截图 下载地址 Reflector.NET反编译工具 v8.5绿色版注册机 下载地址:http://pan.baidu.com/s/1mgN1Cpi 密码:mx19 简介 .NET Reflector是一个类浏览器和反编译器,.NET Reflector可以分析程序集并向你展示它的所有秘密。.NET 框架向全世界引入…

openOCD安装 极简教程

1、下载openOCD 官网下载:https://gnutoolchains.com/arm-eabi/openocd/我的FTP:openOCD 2、解压 3、添加环境变量 ->path 4、CMD运行openOCD 安装完成。

一起谈.NET技术,.NET4.0 之 Dynamic VS Reflection 效率

在我先前的文章中,不断的推广.NET4.0新特性。特别是.NET4.0 Dynamic 这个新特性。随之而来的问题也出现了—Dynamic 执行效率如何? 我们做开发的不光需要代码简洁,能够希望自己能够写出好的架构。还有一点非常重要的就是,我们的写…

arm-none-eabi-gcc 嵌入式交叉编译器安装 极简教程

1、下载arm-none-eabi-gcc win10 官网下载:https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-rm/downloads我的FTP:arm-none-eabo-gcc 2、解压 3、添加环境变量 4、CMD运行 安装完毕&#xff0c…

vscode openOCD 配置Jlink 下载和调试STM32 教程

1、修改openOCD 的配置文件jlink.cfg 由于手头上的jlink 是swd接口,需要将openOCD的jlink.cfg修改,指定接口类型为swd。这里直接复制一份,然后修改,jlink-swd.cfg内容如下: adapter driver jlink transport select s…