一键安装指南:轻松搭建armlinuxgcc编译环境 (arm-linux-gcc 安装)

一键安装指南:轻松搭建ARM Linux GCC编译环境

随着ARM处理器在嵌入式系统和移动设备市场的应用越来越广泛,ARM Linux GCC编译环境的搭建变得越来越重要。但对于初学者来说,搭建ARM Linux GCC编译环境会相对比较困难,因为它要求需要较高的知识技能和复杂的命令行操作。那么,该怎么样才能轻松搭建ARM Linux GCC编译环境呢?本文提供一键安装指南,帮助初学者快速上手。

什么是ARM Linux GCC编译环境?

ARM Linux GCC编译环境,是指通过arm-linux-gcc工具链进行开发的一套软件开发环境。其中,GCC是GNU Compiler Collection的缩写,是一套免费、开源的编译器,可以用来构建各种语言的应用程序。在ARM处理器中,GCC作为编译器,经常用于开发和编译C/C++程序,特别是嵌入式开发。同时,Linux操作系统也是非常重要的一部分,它是由Linus Torvalds率领的众多程序员共同开发的一个基于UNIX的开源操作系统。

ARM Linux GCC编译环境的搭建对于嵌入式系统和移动设备制造商来说至关重要。这样的开发环境可以按照用户需求编译出更优的二进制代码,以支持所需的多种处理器类型和操作系统。

为什么需要ARM Linux GCC编译环境?

如果您是嵌入式软件开发人员,您需要ARM Linux GCC编译环境,因为:

1.它允许您为ARM处理器编写程序,以确保您的应用程序在嵌入式设备上的性能明显提升。

2.即使您不在ARM开发板或嵌入式设备上运行和调试代码,也可以使用ARM Linux GCC编译环境为您的应用程序生成ARM处理器上运行的二进制代码。

3.使用ARM Linux GCC编译环境可以帮助您在嵌入式系统上添加新的Linux应用程序,同时还可以帮助您创建自定义的Linux内核。

4.您可以编写在Linux操作系统上执行的嵌入式应用程序,包括驱动程序和其他高级应用程序。

如何搭建ARM Linux GCC编译环境?

搭建ARM Linux GCC编译环境包括一系列复杂而严格的步骤,需要相当的技术知识。但幸运的是,您可以通过一些简单的方法,轻松搭建ARM Linux GCC编译环境。

步骤一:软件安装

安装所需软件包,包括ARM GCC编译器,用于编写和编译ARM代码的C/C++编译器(ARM工具链),以及确保一些特定的软件包和库的存在。

步骤二:环境配置

在Linux操作系统中,系统环境变量可以用于存储特定环境的全局信息。使用环境变量,可以在任何时候轻松访问重要的变量和系统路径,而无需记住它们的路径。通过配置路径和环境变量,可以轻松地访问ARM Linux GCC编译环境。

步骤三:交叉编译

交叉编译是必须的,因为在将代码移到ARM处理器后,需要在嵌入式设备上运行它。在进行交叉编译之前,您需要建立一些桥梁,确保在编写应用程序时可以正确访问所需的库。

步骤四:生成和构建代码

一旦您已经将环境搭建好了,就可以开始编写代码了。通常,您将编写C或C++代码,并将它们编译成可以在ARM设备上运行的可执行文件。

步骤五:部署软件包

将其部署到ARM设备或板上。这是安装和运行应用程序的最后一步。这通常是通过文件传输协议(FTP)或通过其他远程文件传输方式进行的。

ARM Linux GCC编译环境是嵌入式设备和移动设备开发人员不可或缺的工具,帮助他们编写和编译ARM应用程序。本文提供了一键安装指南,帮助初学者快速掌握ARM Linux GCC编译环境的搭建方法。希望此指南对您的应用程序开发过程有所帮助,并能够快速实现您的项目目标。

相关问题拓展阅读:

cygwin 中如何安装arm-linux-gcc交叉编译器

交叉编译工具链作为嵌入式Linux开发的基础,直接影响到嵌入式开发的项目进度和完成质量。由于目前大多数开发人员使用Windows作为嵌入式开发的宿主机,在Windows中通过安装VMware等虚拟机软件来进行嵌入式Linux开发,这样对宿主机的性能要求极高。Cygwin直接作为Windows下的软件完全能满足嵌入式Linux的开发工作,对硬件的要求低及方便快捷的特点成为嵌入式开发的更佳选择。

目前网络上Cygwin下直接可用的交叉编译器寥寥无几且版本都比较低,不能满足开源软件对编译器版本依赖性的要求(如低版本工具链编译U-Boot出现软浮点问题等);Crosstool等交叉工具链制作工具也是更新跟不上自由软件版本的进度;同时系统介绍Cygwin下制作交叉编译器方面的资料很少。针对上述情况,基于最新版gcc等自由软件构建Cygwin下的交叉编译器显得尤为迫切和重要。

构建前准备工作

首先Cygwin下必须保证基本工具比如make}gcc等来构建bootstrap-gcc编译器,这可以在安装Cygwin时选择安装。参照gcc等安装说明文档来在Cygwin下查看是否已经安装,如输入gcc –v等。改罩

源码下载

gcc-4.5.0的编译需mpc的支持,而mpc又依赖gmp和mpfr库。从各个项目官方网站上下载的最新的源码:

binutils-2.20. l .tar.bz2

gmp-S.O. l .tar.bz2

mpc-0.8.2.tar.gz

mpfr-3.O.O.tar.bz2

gcc-4.S.O.tar.bz2

linux-2.6.34.tar.bz2

glibc-2.11.2.tar.bz2

glibc-ports-2. l l .tar.bz2

gdb-7. l.tar.bz2

设置环境变量

HOST:工具链要运行的目标机器;BUILD:用来建立工具链的机器;TARGET工具链编译产生的二进制代码可以运行的机器。

BUILD=i686-pc-cygwin

HOST=i686-pc-cygwin TARGET=arm-linux

SYSROOT指定根目录,$PREFIX指定安装目录。目标系统的头文件、库文件、运行时对象都将被限定在其中敏歼尺,这在交叉编译中有时很重要,可以防止使用宿主机的头文件和库文件。本文首选$SYSROOT为安装目录,$PREFIX主要作为glibc库安装目录。

SYSROOT=/cross-root

PREFIX=/cross-root/arm-linux

由于GCC-4.5.0需要mpfr,gmp,mpc的支持,而这三个库又不需要交叉编译,仅仅是在编译交叉编译链时使用,所以放在一个临时的目录。

TEMP_PREFIX=/build-temp

控制某些程序的本地化的环境变量:

LC ALL=POSIX

设置环境变量:

PATH=$SYSROOT/bin:儿in:/usr/bin

设置编译时的线程数f31减少编译时间:

PROCS=2

定义各个软件版本:

BINUTILS V=2.20.1

GCC V=4.5.0

GMP V=5.0.1

MPFR V=3.0.0

MPC V二0.8.2

LINUX V二2.6.34

GLIBC V=2.11.2

GLIBC-PORTS V=2.11

GDB V=7.1

构建过程详解

鉴于手工编译费时费力,统一把构建过程写到Makefile脚本文件中,把其同源码包放在同一目录下,执行make或顺次执行每个命令即可进行无人值守的编译安装交叉工桥高具

链。以下主要以Makefile执行过程为主线进行讲解。

执行“make”命令实现全速运行

可在Cygwin的Shell环境下执行“make>make.log 2>&1”命令把编译过程及出现的错误都输出到make.log中,便于查找:

all:prerequest install-deps install-cross-stage-one install-

cross-stage-two

预处理操作

“make prerequest’,命令实现单步执行的之一步,实现输出变量、建立目录及解压源码包等操作。0’set十h”关闭bash的Hash功能,使要运行程序的时候,shell将总是搜索PATH里的目录。这样新工具一旦编译好,shell就可以在$(SYSROOT)/bin目录里找到: prerequest:

set +h&&mkdir -p $(SYSROOT)/bin&&

mkdir -p $(PREFIX)/include&&

mkdir -p $(TEMP一REFIX)&&

export PATH LCes ALL&&

tar -xvf gmp-$(GMP_V).tar.bz2&&

tar -xvf mpfr-$(MPFR_V).tar.bz2&&

tar -xvf mpc-$(MPC_V).tar.gz&&

tar -xvf binutils-$(BINUTILS_V).tar.bz2&&

tar -xvf gcc-$(GCC_V).tar.bz2&&

tar -xvf linux-$(LINUX_V).tar.bz2&&

tar -xvf glibc-$(GLIBC_V).tar.bz2&&

tar -xvf glibc-ports-$(GLIBC-PORTS_V).tar.bz2&&

my glibc-ports-$(GLIBC-PORTS_V)

glibc-$(GLIBC_V)/ports&&

tar -xvf gdb-$(GDB V).tar.bz2

非交叉编译安装gcc支持包mpc

00make install-deps”命令实现单步执行的第二步,实现mpc本地编译,mpc依赖于gmp和mpfr

install-deps:gmp mpfr mpc

gmp:gmp-$(GMP_V)

mkdir -p build/gmp&&cd build/gmp&&

../../gmp-*/configure

–disable-shared –prefix=$(TEMP_PREFIX)&&

$(MAKE)一$(PROCS)&&$(MAKE) install

mpfr:mpfr-$(MPFR_V)

mkdir -p b-uild/mpfr&&cd build/mpfr&&

../..//mpfr-*/configure

LDF’LAGS=”-Wl,-search_paths_first”–disable-shared

–with-gmp=$(TEMP_PREFIX)

–prefix=$(TEMP_PREFIX)&&

$(MAKE)一$(PROCS) all&&$(MAKE) install

mpc: mpc-$(MPC_V) gmp mpfr

mkdir -p build/mpc&&cd build/mpc&&

../../mpc-*/configure

–with-mpfr=$(TEMP PREFIX)

–with-gmp=$(TEMP_PREFIX)

–prefix=$(TEMP_PREFIX)&&

$(MAKE)一$(PROCS)&&$(MAKE) install

交叉编译之一阶段

“make install-cross-stage-one’,命令实现单步执行的第三步,编译安inutils,bootstrap-gcc和获取Linux内核头文件:

install-cross-stage-one:cross-binutils cross-gcc get-kernel-headers

编译安inutils

cross-binutils: binutils-$(BINUTILS_ V)

mkdir -p build/binutils&&cd build/binutils&&

../..//binutils-*/configure –prefix=$(SYSROOT)

–target=$(TARGET)–disable-nls&&

$(MAKE)j$(PROCS)&&$(MAKE) install

编译安ootstrap-gcc。使用一disable-shared参数的意思是不编译和安装libgcc_ eh.a文件。glibc软件包依赖这个库,因为它使用其内部的一lgcc_eh来创建系统。这种依赖

性,可通过建立一个指向libgcc.a符号链接得到满足,因为该文件最终将含有通常在libgcc- eh.a中的对象(也可通过补丁文件实现)。

cross-gcc:gcc-$(GCC_V)

mkdir -p build/gcc&&cd build/gcc&&

二//gcc-*/configure

–target=$(TARGET)–prefix=$(SYSROOT)

–disable-nls –disable-shared –disable-multilib

disable-decimal-float–disable-threads

–disable-libmudflap –disable-libssp

–disable-libgomp –enable-languages=c

–with-gmp=$(TEMP_PREFIX)

–with-mpfr=$(TEMP_PREFIX)

–with-mpc=$(TEMP_PREFIX)&&

$(MAKE) -j$(PROCS)&&$(MAICE) install&&

In -vs libgcc.a’arm-linux-gcc -print-libgcc-file-name I

sed’s/libgcc/& eh/’}

获取Linux内核头文件:

get-kernel-headersainux-$(LINUX_V)

cd linux-$(LINUX_V)&&

$(MAICE) mrproper&&$(MAKE) headers check&&

$(MAKE) ARCH=arm&&

INSTALLes HDR_ PATH=dest headers_ install&&

find dest/include

(-name .install一。-name ..installNaNd)-delete&&

cp -rv desdinclude/* $(PREFIX)/include

交叉编译第二阶段

编译安装glibc、重新编译安inutils、完整编译安装gcc和编译安装gdb o “make install-cross-stage-two’,命令实现单步执行的第四步: install-cross-stage-two:cross-glibc cross-rebinutils cross-g++ cross-gdb

编译安装glibca glib。的安装路径特意选为$(PREFIX),与gcc更好找到动态链接库也有关系,选在$(SYSROOT)提示找不到crti.o; glibc已经不再支持i386; glibc对ARM等的处理器的支持主要通过glibc-ports包来实现;正确认识大小写敏感(Case Sensitive)和大小写不敏感(CaseInsensitive)系统,大小写敏感问题主要影响到glibc,是交叉编译glibc成功的关键:Cygwin帮助手册中可知Cygwin是默认大小写不敏感的n},但是UNIX系统是大小写敏感的,这也是Cygwin和UNIX类系统的一个区别。通过作者自行参考制作的glibc-2.11.2-cygwin.patch补T使glibc变为Case-Insensitive,此补丁主要是对大小写敏感问题改名来实现。

交叉编译过程中安装的链接器,在安装完Glibc以前都无法使用。也就是说这个配置的forced unwind支持测试会失败,因为它依赖运行中的链接器。设置libc_ cvforced unwind=yes这个选项是为了通知configure支持force-unwind,而不需要进行测试。libc cv_c_cleanup=yes类似的,在configure脚本中使用libc_cv_c cleanup=yes,以便配置成跳过测试而支持C语言清理处理。

cross-glibc:glibc-$(GLIBC_V)

cd glibc-$(GLIBC_V)&&

patch -Np 1 –i…//glibc-2.11.2-cygwin.patch&&

cd..&&mkdir -p build/glibc&&

cd build/glibc&&

echo”libc cv_forcedes unwind=yes”>config.cache&&

echo “libc cv_c_cleanup=yes”>>config.cache&&

echo “libc cv_arm_tls=yes”>>config.cache&&

../../glibc-*/configure –host=$(TARGET)

–build=$(../OneScheme/glibc-2.11.2/scripts/config.guess)

–prefix=$(PREFIX)–disable-profile

–enable-add-ons –enable-kernel=2.6.22.5

–with-headers=$(PREFIX)/include

–cache-file=config.cache&&

$(MAKE)&&$(MAKE) install

重新编译安inutils。编译之前要调整工具链,使其

指向新生成的动态连接器。

调整工具链:

SPECS=

‘dirname $(arm-linux-gcc -print-libgcc-file-name)’/specs

arm-linux-gcc -dumpspecs

sed -e ‘s@/lib(64)\?/ld@$(PREFTX)&@g’ -e ,}/}}*cPP}$/{n;s,$,-isystem $(PREFIX)/include,}”

>$SPECS

echo “New specs file is: $SPECS”

unset SPECS

测试调整后工具链:

echo ‘main(川’>dummy.c

arm-linux-gcc

-B/cross-root/arm-linux/lib dummy.c

readelf -1 a.out I grep’:/cross-roobarm-linux’

调整正确的输出结果:

一切正确后删除测试程序:

rm -v dummy.c a.out

重新编译binutils。指定–host,–build及–target,否则配置不成功,其config.guess识别能力不如gcc做的好。

cross-rebinutils: binutils-$(BINUTILS_V)

mkdir -p build/rebinutils&&

cd build/rebinutils&&CC=”$(TARGET)-gcc

-B/cross-roodarm-linux/lib/”&&AR=$(TARGET)-ar&&

RANLIB=$(TARGET)-ranlib&&../..//binutils-*/configure

–host=$(HOST)–build=$(BUILD)–target=$(TARGET)

–prefix=$(SYSROOT)–disable-nls

–with-lib-path=$(PREFIX)/lib&&

$(MAKE)–$(PROCS)&&$(MAKE) install

高于4.3版的gcc把这个编译当作一个重置的编译器,并且禁止在被一prefix指定的位置搜索startfiles。因为这次不是重置的编译器,并且$(SYSROOT)目录中的startfiles对于创

建一个链接到$$(SYSROOT)目录库的工作编译器很重要,所以我们使用下面的补丁,它可以部分还原gcc的老功能tai . patch -Npl –i../gcc-4.5.0-startfiles_fix-l.patch

在正常条件下,运行gcc的fixincludes脚本,是为了修复可能损坏的头文件。它会把宿主系统中已修复的头文件安装到gcc专属头文件目录里,通过执行下面的命令,可以抑

制fixincludes脚本的运行(此时目录为/gcc-4.5.0)。

cp -v gcc/Makefile.in{,.orig}

sed ‘s@\./fixinc\.sh@-c true@’

gcc/Makefile.in.orig > gcc/Makefile.in

下面更改gcc的默认动态链接器的位置,使用已安装在/cross-root/ann-linux目录下的链接器,这样确保在gcc真实的编译过程中使用新的动态链接器。即在编译过程中创建的所有

二进制文件,都会链接到新的glibc文件

for file in

$(find gcc/config -name linux64.h-o -name linux.h –o -name sysv4.h)

do cp -uv $file{,.orig}

sed -a ‘s@/lib(64)?(32)?/Id@/cross-root/arm-linux&@g’-e’s@/usr@/cross-rootlarm-linux@g’ $file.orig>$file echo‘

#undef STANDARD INCLUDE DIR

#define STANDARD_ INCLUDE DIR “/cross-root/arm-linux/include”

#define STANDARD STARTFILE PREFIX 1 “/cross-root/arm-linux/lib”

#define STANDARD_ STARTFILE_ PREFIX_ 2””’>>$file

touch $file.orig done

完整编译安装gcc。更好通过指定–libexecdir更改libexecdir到atm-linux目录下。–with-local-prefix选项指定gcc本地包含文件的安装路径此处设为$$(PREFIX),安装后就会在内核头文件的路径下。路径前指定$(Pwd)则以当前路径为基点,不指定则默认以/home路径为基点,这点要注意。

cross-g++:gcc-$(GCC-)

mkdir -p build/g十+&&cd build/g++&&

CC=”$(TARGET)-gcc AR=$(TARGET)-ar&&

-B/cross-roodarm-linux/lib/”&&

RANLIB=$(TARGET)-ranlib&&

..//gcc-*/configure

–host=$(HOST)–build=$(BUILD)–target=$(TARGET)

–prefix=$(SYSROOT)–with-local-prefix=$(PREFIX)

–enable-clocale=gnu –enable-shared

–enable-threads=posix –enable -cxa_atexit

–enable-languages=c,c++–enable-c99

–enable-long-long –disable-libstdcxx-pch

–disable-libunwind-exceptions

–with-gmp=$(TEMP_PREFIX)

–with-mpfr=$(TEMP_PREFIX)

–with-mpc=$(TEMP_PREFIX)&&

$(MAKE) LD_IBRARY_ATH=

$(pwd)/$(../../gcc-4.5.0/config.guess)/libgcc&&

$(MAKE) install

编译安装gdb,至此完成整个工具链的制作。

cross-gdb: gdb-$(GDB V)

mkdir -p build/gdb&&cd build/gdb&&

../../gdb-*/configure –prefix=$(SYSROOT)

–target=$(TARGET)–disable-werror&&

$(MAKE)-j$(PROCS)&&$(MAKE) install

“make clean”命令清除编译生成的文件和创建解压的文件夹

.PHONY:clean

dean:

rm -fr $(TEMP_PREFIX) build

binutils-$(BINUTIL,S_V) gcc-$(GCC_V)

glibc-$(NEWL.IB_V) gdb-$(GDB_V)

gmp-$(GMP_V) mpc-$(MPC_V) mpfr-$(MPFR_V)

工具链测试

命令行中输入以下内容:

echo ‘main(){}’>dummy.c

arm-linux-gcc -o dummy.exe dummy.c

file dummy.exe

运行正常的结果:

dummy.exe: ELF 32-bit LSB executable, ARM, version 1,for GNU/Linux 2.6.22, dynamically linked (uses shared libs),not stripped.

为什么要用 cygwin 呢……

不过 cygwin 的操作和普通 Linux 下面区别不大。但你要知道,你肢雀在 cygwin 里面,cygwin != linux 。所以你的 arm 交叉编译器必须自历渣早己编译梁败才行。

安装arm-linux-gcc出现以下错误

安装交叉编译工具链:

1、轮塌纳复制arm-linux-gcc-4.3.2.tgz到根目录下

2、解压即:#sudo tar -xvzf arm-linux-gcc-4.3.2 -C / (加了 -C / 会直接解压生成在/usr/local/arm下)

3、修改配置文件:gedit /etc/profile

打开文件在末尾加上如下:export PATH=$PATH:/usr/local/arm/4.3.2/bin 保存退出

4、使配置生效:重启或用腊没如下命令

# source /etc/profile

检查路径添加是否成功:# echo $PATH

5、输入# arm-linux-gcc -v

若安衫宏装成功即可看到版本信息

关于arm-linux-gcc 安装的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。


数据运维技术 » 一键安装指南:轻松搭建armlinuxgcc编译环境 (arm-linux-gcc 安装)