精华内容
下载资源
问答
  • 交叉编译GCC for arm

    千次阅读 2017-07-22 20:37:38
    之前被同学问了一个开发版上...一般官方会提供好可以使用的整套编译工具链,但是如果需要编译交叉编译用的gcc,需要知道三个概念: Build Platform: This is the platform on which the compilation tools are executed

    之前被同学问了一个开发版上编译程序依赖的问题,对这方面不是很熟悉,回去之后又重新查了挺久,总之这是个如何用gcc编译交叉工具链的问题.
    一般官方会提供好可以使用的整套编译工具链,但是如果需要编译交叉编译用的gcc,需要知道三个概念:

    Build Platform: This is the platform on which the compilation tools are executed.
    Host Platform: This is the platform on which the code will eventually run.
    Target Platform: If this is a compiler, this is the platform that the compiler will generate code for.

    Build Platform:简单来说就是编译gcc的系统
    Host Platform: 执行gcc来编译生成跨平台程序的平台
    Target Platform: 执行编译的程序的平台

    总的来说gcc也是一个软件,也需要用编译工具编译生成,当然也是使用gcc编译的.(当然第一个gcc肯定不是.

    那么进入正题开始编译,这次编译的target_arch是arm-none-linux-gnueabi.
    这四个字段的意思是:

    arch[-vendor]-os[-abi]
    arch is for architecture: arm, mips, x86, i686…
    vendor is tool chain supplier: apple,
    os is for operating system: linux, none (bare metal)
    abi is for application binary interface convention: eabi, gnueabi, gnueabihf

    目标是得到交叉编译使用的gcc编译工具链以及对应的glibc库。

    1.指定环境

    为了不扰乱现有的环境而不使用系统目录变量

    export SRC_DIR=/root/cross/src
    export BUILD_DIR=/root/cross/build
    export INSTALL_DIR=/root/cross/arm
    export SYSROOT_DIR=$INSTALL_DIR/sysroot
    export BINUTIL_SRC=$SRC_DIR/binutils-2.28
    export KERNEL_SRC=$SRC_DIR/linux-4.12.2 
    export GCC_SRC=$SRC_DIR/gcc-5.4.0
    export GLIBC_SRC=$SRC_DIR/glibc-2.25 
    export TARGET_MACH=arm-none-linux-gnueabi
    export BUILD_MACH=$(gcc -dumpmachine)
    export LINUX_ARCH=arm

    2.Download

    mkdir -p $SRC_DIR
    cd $SRC_DIR

    3.编译binutil

    cd $BINUTILS_SRC
    ./configure --prefix=$INSTALL_DIR --build=$BUILD_MACH --target=$TARGET_MACH --with-sysroot=$SYSROOT_DIR --disable-werror
    cd $BINUTIL_SRC
    make -j4
    make install 

    3.编译linux头文件

    cd $KERNEL_SRC
    make mrproper
    make ARCH=$LINUX_ARCH INSTALL_HDR_PATH=$SYSROOT_DIR/usr headers_install

    4.第一次编译GCC

    #  eror Building GCC requires GMP 4.2+, MPFR 2.4.0+ and MPC 0.8.0+
    #  slove : yum install libmpc-devel
    # -disable-libmudflap --disable-libssp来禁止编译时对glibc的检查
    sed -i -e '/k prot/agcc_cv_libc_provides_ssp=yes' $GCC_SRC/gcc/configure
    mkdir $BUILD_DIR/build-gcc 
    cd $BUILD_DIR/build-gcc
    
    $GCC_SRC/configure --prefix=$INSTALL_DIR --build=$BUILD_MACH --host=$BUILD_MACH --target=$TARGET_MACH --without-headers --enable-boostrap --enable-languages='c' --disable-threads --enable-__cxa_atexit --disable-libmudflap --with-gnu-ld --with-gnu-as --disable-libssp --disable-libgomp --disable-nls --disable-shared
    
    make -j$(nproc) all-gcc
    make install-gcc
    make -j$(nproc) all-target-libgcc
    make install-target-libgcc
    

    这里之前使用6.X和5.X版本的源码编译都失败了..最后用4.8版本通过 检查一下$INSTALL_DIR/bin目录下已经有了arm-none-linux-guneabi-{tool}一套东西.

    5.编译glibc

    mkdir $BUILD_DIR/build-libc 
    cd $BUILD_DIR/build-libc
    echo 'libc_cv_forced_unwind=yes' > config.cache
    echo 'libc_cv_c_cleanup=yes' >> config.cache
    
    export PATH=$INSTALL_DIR/bin:$PATH
    export CC=${TARGET_MACH}-gcc
    export LD=${TARGET_MACH}-ld
    export AS=${TARGET_MACH}-as

    加入到系统路径里并指定默认编译指令为刚编译出来的那一套东西

    ./configure --prefix=/usr --build=$BUILD_MACH --host=$TARGET_MACH --with-headers=$SYSROOT_DIR/usr/include --config-cache --enable-kernel=2.6.32
    make -k install-headers cross_compiling=yes install_root=$SYSROOTDIR
    make -j$(nproc)
    make install_root=$SYSROOT_DIR install

    耗时超长一度以为自己编错了。。。

    之后重置

    unset CC 
    unset LD
    unset AS

    6.第二次编译gcc

    我们得到了glibc,需要对gcc重新进行编译

    mkdir $BUILD_DIR/build-gcc2
    cd $BUILD_DIR/build-gcc2
    echo 'libc_cv_forced_unwind=yes' > config.cache
    echo 'libc_cv_c_cleanup=yes' >> config.cache
    GCC_SRC/configure --prefix=$INSTALL_DIR --build=$BUILD_MACH --target=$TARGET_MACH --with-sysroot=$SYSROOT_DIR --with-build-sysroot=$SYSROOT_DIR --enable-languages='c,c++' --with-gnu-as --with-gnu-ld --disable-multilib --disable-nls --enable-threads=posix --enable-long-longx

    –with-build-sysroot来制定头文件的位置

    make -j$(nproc) all-gcc
    make install-gcc

    安装gcc

    mkdir $BUILD_DIR/build-gcc3
    cd $BUILD_DIR/build-gcc3
    echo 'libc_cv_forced_unwind=yes' > config.cache
    echo 'libc_cv_c_cleanup=yes' >> config.cache
    $GCC_SRC/configure --prefix=$INSTALL_DIR --build=$BUILD_MACH --target=$TARGET_MACH --with-sysroot=$SYSROOT_DIR --with-build-sysroot=$SYSROOT_DIR --enable-languages='c,c++' --with-gnu-as --with-gnu-ld --disable-multilib --disable-nls --enable-threads=posix --disable-libssp --enable-long-longx --with-shared
    
    make -j$(nproc)
    make install

    到此编译完成,工具链在 INSTALLDIR/bin SYSROOT_DIR下。
    至于如何检查编译是否成功可以使用qemu来测试。
    具体看使用 qemu模拟arm开发板
    幸亏当初没脑子一热去学嵌入式…

    展开全文
  • 查看交叉编译gcc的版本

    千次阅读 2018-09-04 09:05:03
    查看交叉编译gcc的版本 1.使用which命令查看所在路径,比如 which arm-arago-linux-gnueabi-gcc 2.进入该路径下使用命令arm-arago-linux-gnueabi-gcc -v 结果: Using built-in specs.Target: arm-arago-linux-...

    查看交叉编译gcc的版本

    1.使用which命令查看所在路径,比如

    which arm-arago-linux-gnueabi-gcc

    2.进入该路径下使用命令arm-arago-linux-gnueabi-gcc -v

    结果:

    Using built-in specs.
    Target: arm-arago-linux-gnueabi
    Configured with: /OE/arago-tmp/work/i686-armv5te-sdk-arago-linux-gnueabi/gcc-cross-sdk-4.3.3-r23.4-arago1/gcc-4.3.3/configure --build=i686-linux --host=i686-linux --target=arm-arago-linux-gnueabi --prefix=/arago-2011.06/armv5te --exec_prefix=/arago-2011.06/armv5te --bindir=/arago-2011.06/armv5te/bin --sbindir=/arago-2011.06/armv5te/bin --libexecdir=/arago-2011.06/armv5te/libexec --datadir=/arago-2011.06/armv5te/share --sysconfdir=/arago-2011.06/armv5te/etc --sharedstatedir=/arago-2011.06/armv5te/share/com --localstatedir=/arago-2011.06/armv5te/var --libdir=/arago-2011.06/armv5te/lib --includedir=/arago-2011.06/armv5te/include --oldincludedir=/arago-2011.06/armv5te/include --infodir=/arago-2011.06/armv5te/share/info --mandir=/arago-2011.06/armv5te/share/man --enable-largefile --disable-nls --enable-ipv6 --with-gnu-ld --enable-shared --enable-languages=c,c++,objc,fortran --enable-threads=posix --disable-multilib --enable-c99 --enable-long-long --enable-symvers=gnu --enable-libstdcxx-pch --program-prefix=arm-arago-linux-gnueabi- --enable-target-optspace --enable-cheaders=c_std --enable-libssp --disable-bootstrap --disable-libgomp --disable-libmudflap --with-float=soft --with-sysroot=/arago-2011.06/armv5te/arm-arago-linux-gnueabi --with-build-time-tools=/OE/arago-tmp/sysroots/i686-linux/usr/armv5te/arm-arago-linux-gnueabi/bin --with-build-sysroot=/OE/arago-tmp/sysroots/armv5te-arago-linux-gnueabi --disable-libunwind-exceptions --disable-libgomp --disable-libmudflap --with-mpfr=/OE/arago-tmp/sysroots/i686-linux/usr --enable-__cxa_atexit
    Thread model: posix
    gcc version 4.3.3 (GCC) 

    展开全文
  • 这是交叉编译gcc的时候需要的三个库gmp mpfr mpc
  • Windows下的arm编译器,gcc-linaro-4.9.4-2017.01-i686-mingw32_arm-linux-gnueabihf.tar.xz 安装方法: 1.将下载的包用7zip解压到D:\gcc 2.添加环境变量: 解压文件后,将D:\gcc\bin目录,添加到系统PATH环境变量...
  • gcc交叉编译

    千次阅读 2018-12-19 21:36:21
    GNU编译器套件(GNU Compiler Collection)包括C、C++、...GCC的初衷是为GNU操作系统专门编写的一款编译器。GNU系统是彻底的自由软件。此处,“自由”的含义是它尊重用户的自由。 GCC(GNU Compiler Collection,...

    GNU编译器套件(GNU Compiler Collection)包括CC++Objective-CFortranJavaAdaGo语言的前端,也包括了这些语言的库(如libstdc++、libgcj等等)。GCC的初衷是为GNU操作系统专门编写的一款编译器。GNU系统是彻底的自由软件。此处,“自由”的含义是它尊重用户的自由。

    GCC(GNU Compiler Collection,GNU编译器套件),是由 GNU 开发的编程语言编译器。它是以GPL许可证所发行的自由软件,也是 GNU计划的关键部分。GCC原本作为GNU操作系统的官方编译器,现已被大多数类Unix操作系统(如LinuxBSDMac OS X等)采纳为标准的编译器,GCC同样适用于微软的Windows。 [2]  GCC是自由软件过程发展中的著名例子,由自由软件基金会以GPL协议发布。

    GCC 原名为 GNU C 语言编译器(GNU C Compiler),因为它原本只能处理 C语言。GCC 很快地扩展,变得可处理 C++。后来又扩展能够支持更多编程语言,如FortranPascalObjective-CJavaAdaGo以及各类处理器架构上的汇编语言等,所以改名GNU编译器套件(GNU Compiler Collection)。

    交叉编译:这个概念的出现和流行是和嵌入式系统的广泛发展同步的。我们常用的计算机软件,都需要通过编译的方式,把使用高级计算机语言编写的代码(比如C代码)编译(compile)成计算机可以识别和执行的二进制代码。比如,我们在Windows平台上,可使用Visual C++开发环境,编写程序并编译成可执行程序。这种方式下,我们使用PC平台上的Windows工具开发针对Windows本身的可执行程序,这种编译过程称为native compilation,中文可理解为本机编译。然而,在进行嵌入式系统的开发时,运行程序的目标平台通常具有有限的存储空间和运算能力,比如常见的 ARM 平台,其一般的静态存储空间大概是16到32MB,而CPU的主频大概在100MHz到500MHz之间。这种情况下,在ARM平台上进行本机编译就不太可能了,这是因为一般的编译工具链(compilation tool chain)需要很大的存储空间,并需要很强的CPU运算能力。为了解决这个问题,交叉编译工具就应运而生了。通过交叉编译工具,我们就可以在CPU能力很强、存储空间足够的主机平台上(比如PC上)编译出针对其他平台的可执行程序。
    --------------------- 
    作者:西子湖畔的蜗牛 
    来源:CSDN 
    原文:https://blog.csdn.net/wzhqazcscs/article/details/77688478 
    版权声明:本文为博主原创文章,转载请附上博文链接!

    展开全文
  • Linux设置编译环境---交叉编译器GCC

    千次阅读 2019-03-12 20:29:07
    在我们开始学习Linux系统开发之前我们需要安装一下code编译环境。 arm-linux-gcc 编译器。 第一步,我们需要先安装基本的开发环境,命令如下: sudo apt-get install build-essential 安装完成后,还要分别...

    在我们开始学习Linux系统开发之前我们需要安装一下code编译环境。

    arm-linux-gcc 编译器。

    第一步,我们需要先安装基本的开发环境,命令如下:

    sudo apt-get install build-essential

    安装完成后,还要分别安装bison、flex,他们分别是语法、词法分析器。

    命令如下:

    sudo apt-get install bison flex

    安装完成后还需要安装一下C库函数的man手册,这样就可以通过man read命令来查看函数的用法了。

    命令如下:

    sudo apt-get install manpages-dev

    这里是已经安装过了。

    到这里我们的基本环境已经安装完成了,接下里是我们安装交叉编译器。

     

    第二步,安装GCC交叉编译工具

    先把 arm-linux-gcc-3.4.5-glibc-2.3.6.tar.bz2 文件复制到samba共享文件夹中。

    然后把这个文件复制到gcc_tools文件夹中,再解压。(个人习惯而已)

    然后输入命令解压: tar xjf arm-linux-gcc-3.4.5-glibc-2.3.6.tar.bz2 , 如图:

    这个时候解压完成。

    然后设置环境变量: $ export PATH=$PATH:/home/shao/shao/gcc_tools/gcc_3.4.5-glibc-2.3.6 (这里要注意 “=”两端不能有空格)。

    也可以设置一个绝对路径的环境变量,省得以后每次都要敲环境变量:

    PATH="/usr/local/sbin:/usrlocal/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games: /home/shao/shao/gcc_tools/gcc-3.4.5-glibc-2.3.6/bin"

    设定完成后我们还需要安装一下 ncurses,这是一个体能功能键定义(快捷键)、屏幕绘制以及基于文本终端的图形交互动态库。

    如果没有这个库,在执行“make menuconfig”时会出错。

    命令如下:

    到这里我们的交叉编译器已经安装完毕。

    我们可以测试一下,在windows_share里面放入test.c文件,功能是用来打印一句hello world!.

    操作如下图:  

    gcc -o hello test.c

    在这句话中gcc是指定用来编译的编译器是哪个。

    -o是编过程中的编译选项。

    hello是编译后生成的可执行文件

    test.c是我们被编译的源文件。

    编译完成后就会产生一个可执行文件 hello,  注意:这里这个hello没有后缀名。

    然后用 ./hello就可以看到执行效果了。如下图:

    到这里我们安装完成!

    arm-linux-gcc编译器也是这个一起安装完成了。接下来我们查看一下:

    输入指令:arm-linux-gcc -v 

    展开全文
  • gcc-4.8.3交叉编译

    千次阅读 2018-07-06 16:33:45
    1.环境: Ubuntu 16.04 2.获取 wget mirrors.ustc.edu.cn/gnu/gcc/gcc-4.8.3/gcc-4.8.3.tar.bz2 3.解压 tar xvf gcc-4.8.3.tar.bz2 4.切换目录 cd gcc-4.8.3 5.下载mpfr等依赖库 ...6.创建编译目录...
  • 目录问题描述宿主机环境源码编译1. 编译环境安装2. 依赖包及GCC源码下载3. 编译3.1. 解压3.2....本文适用于想要更改released的arm-linux-gcc的一些配置选项,来生成自己独特配置的交叉编译器,比如说 a
  • Ubuntu下安装arm-linux-gcc交叉编译
  • 博客描述安装步骤https://blog.csdn.net/jinmie0193/article/details/79868732
  • https://www.jianshu.com/p/d1eafc7b9ac3
  • linux-gcc的区别就是gcc是linux下的C语言编译器,编译出来的程序在本地执行,而arm-linux-gcc用来在linux下跨平台的C语言编译器,编译出来的程序在目标机(如ARM平台)上执行,嵌入式开发应使用嵌入式交叉编译工具链。...
  • 搭建完整的arm-linux-gcc交叉编译环境

    万次阅读 多人点赞 2018-12-11 15:51:57
    安装环境  Linux版本:Ubuntu 12.04 内核版本:Linux 3.5.0 交叉编译器版本:arm-linux-gcc-4.4.3 这个版本的交叉... 首先简单介绍一下,所谓的搭建交叉编译环境,即安装、配置交叉编译工具链。在该环境下编译出...
  • 参考 Building GCC as a cross compiler for Raspberry Pi How to Build a GCC Cross-Compiler 环境 PC: ubuntu18.04 64位 (Intel(R) Core(TM) i7-4790 CPU @ 3.60...GCCgcc version 7.4.0 (Ubuntu 7.4.0...
  • 编译环境:ubuntu 12.041、交叉编译器简介1.1、交叉编译器概念与交叉编译对应的是本地编译,在了解交叉编译前,先来了解一下什么是本地编译。本地编译 本地编译可以理解为,在当前编译平台下,编译出来的程序只能放...
  • 交叉编译器gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu,用于在Ubuntu的64位主机上编译一个开发板上的可执行程序。
  • arm-linux交叉编译工具,用于arm系列开发板编译boot和linux内核
  • 在Ubuntu环境中,进行ARM嵌入式开发时,Ubuntu自带的x86gcc编译器编译出来的程序不能在ARM芯片上运行,我们需要安装一个交叉编译器gcc,是得编译出来的软件运行在ARM芯片中 1. 下载gcc编译器 我学习使用的gcc交叉...
  • linux下编译arm-gcc交叉编译总结

    千次阅读 2014-04-05 08:40:56
    1、交叉编译的概念 你的本机是linux,你的目标代码是STM32(arm指令的子集) 用linux系统的gcc1,编译一个gcc2,gcc1是linux本机的用于生成x86代码,gcc2本质是x86代码,但是gcc2生成的目标代码是stm32的代码。gcc2...
  • eclipse 交叉编译 gcc g++ as的路径配置

    千次阅读 2014-09-18 17:41:30
    交叉编译就是说在一个平台上编译在另一个平台
  • linux-arm-gcc-4.9.2交叉编译工具,已验证,决对可以使用
  • arm linux交叉编译工具gcc,适用ubuntu(linux)系统平台使用。
  • 在下载gcc for arm的时候,往往会有很多个版本: 这些版本的区别是什么?我该下载哪个版本? 区别无外乎几个:大端 or 小端、ARMv7 or ARMv8、32位 or 64位、裸机 or 嵌入式Linux multiarch name ...
  • arm-linux-gcc交叉编译环境搭建

    千次阅读 2017-09-01 17:52:31
    2、arm-linux-gcc压缩包。我用的是arm-2009q3.tar arm-2009q3.tar网盘地址:http://pan.baidu.com/s/1hs053Pq开始搭建: 首先创建文件夹:cd /usr/local sudo mkdir arm cd arm把arm-2009q3.tar复
  • 交叉工具链arm-linux-gcc 4.5.1,以及制造根文件系统时需要的动态链接库也在该工具的目录下。
  • 适用于飞思卡尔IMX6UL系列CPU的专用交叉编译工具链,GCC版本5.4.0,内核3.15(兼容4系列内核)
  • 适用于WSL linux 的 ARMV5tej GCC.8.1.0交叉编译工具链。
  • 在Ubuntu 64位系统上安装交叉编译工具arm-linux-gcc。 设置好环境变量PATH=$PATH::/home/share/jz2440_SDK/tools/gcc-3.4.5-glibc-2.3.6/bin 输入 arm-linux-gcc -v,提示找不到 bash: /home/share/jz2440_SDK/...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 45,257
精华内容 18,102
关键字:

交叉编译gcc