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,一经查实,立即删除!

相关文章

Md5 Md5实现原理

参考: http://wenku.baidu.com/view/ddb1008271fe910ef12df8df.html转载于:https://www.cnblogs.com/85538649/archive/2011/08/24/2152187.html

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、快速放电…

[react] 状态管理器解决了什么问题?什么时候用状态管理器?

[react] 状态管理器解决了什么问题?什么时候用状态管理器? 专注 view 层 React 官网是这么简介的。JavaScript library for building user interfaces.专注 view 层 的特点决定了它不是一个全能框架,相比 angular 这种全能框架,R…

艾伟:ASP.NET跨页面传值技巧总结

关于页面传值的方法,引发了很多讨论。看来有很多人关注这个,我就我个人观点做了些总结,希望对大家有所帮助。 1. 使用QueryString变量 QueryString是一种非常简单的传值方式,他可以将传送的值显示在浏览器的地址栏中。如果是传递…

BCC异或校验 Linux C

1、BCC异或校验 从输入的HEX第一个字节开始,按字节依次循环计算异或值直到HEX结尾字节,得到的最终一个字节值。 2、C程序 /******************************************************************************* _____ ___ ____ ___ _____ _ …

Linux tcpdump命令用法详解

From: http://os.51cto.com/art/201005/201921.htm TCPDUMP简介 在传统的网络分析和测试技术中,嗅探器(sniffer)是最常见,也是最重要的技术之一。sniffer工具首先是为网络管理员和网络程序员 进行网络分析而设计的。对于网络管理人员来说,使用…

[react] 在React中怎么引用sass或less?

[react] 在React中怎么引用sass或less&#xff1f; 安装 npm node-sass -D 导入&#xff1a; import app from ../app.module.scss 使用&#xff1a; <div className{app.tabbar}> 个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c;…

Revit二次开发“创建组遍历组Group”

group 就是吧一些有关系的对象放在一个组里面 [Transaction(TransactionMode.Manual)][Regeneration(RegenerationOption.Manual)]//[Journaling(JournalingMode.NoCommandData)]publicclasscmdGroup : IExternalCommand{ publicResult Execute(ExternalCommandData cmdData…

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

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

C 如何对指针进行指定字节的偏置操作

1、概念 指针进行偏置操作后&#xff0c;需要注意的是偏置指向为同类型的指针&#xff0c;不可简单认为指针的指向地址增加或减小响应的偏置量。 2、示例 int aVal 100; int *pVal; int offset 2; pVal &aValoffset;Q:假设aVal的地址为6684156&#xff1b;求pVal的值…

[react] 举例说明如何在React创建一个事件

[react] 举例说明如何在React创建一个事件 import React, { Component } from react; import ReactDOM from react-dom; var EventEmitter require(events).EventEmitter; let emitter new EventEmitter();class ListItem extends Component {static defaultProps {checked…

c# 2.0实现摄象头视频采集,拍照,录象

From: http://blog.csdn.net/ysq5202121/article/details/5672291 Camera.cs类文件using System; using System.IO; using System.Drawing.Imaging; using System.Runtime.InteropServices; using System.Drawing; using System.Collections; using System.Data;namespace So…

socket初级使用(客户端)

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

CRC16循环冗余校验 RTU-MODBUS标准 Linux C

1、概述 CRC16循环冗余校验常用在MODBUS协议中&#xff0c;用于校验报文的完整性。CRC16校验值为uint16_t 无符号整形2字节&#xff0c;在MODBUS协议中&#xff0c;低检验字节在前&#xff0c;高校验字节在后&#xff0c;比如校验结果crc160x1788&#xff0c;则MODBUS中的校验…

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

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

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

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

[react] React为什么要搞一个Hooks?

[react] React为什么要搞一个Hooks&#xff1f; 动机 Hook 解决了我们五年来编写和维护成千上万的组件时遇到的各种各样看起来不相关的问题。无论你正在学习 React&#xff0c;或每天使用&#xff0c;或者更愿尝试另一个和 React 有相似组件模型的框架&#xff0c;你都可能对这…

有关Botton的用法(二)

关于设置listener监听onClicked事件的步骤分析 Steps: 1.tell android you are interested in listening to a button click 2.bring your xml button inside java 3.tell your java button whose responding when its clicked 4.what should happen when button is clicked 1 …