精华内容
下载资源
问答
  • 查看交叉编译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) 

    展开全文
  • 1.环境:Ubuntu 16.042.获取wget mirrors.ustc.edu.cn/gnu/gcc/gcc-4.8.3/gcc-4.8.3.tar.bz23.解压tar xvf gcc-4.8.3.tar.bz24.切换目录cd gcc-4.8.35.下载mpfr等依赖库./...创建编译目录mkdir build7.切换到buil...

    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等依赖库

    ./contrib/download_prerequisites

    6.创建编译目录

    mkdir build

    7.切换到build目录

    cd build

    8.配置

    CC=arm-linux-gcc AR=arm-linux-ar ../configure --prefix=/mnt/ssd/gcc --enable-checking=release --enable-languages=c,c++ --enable-threads=posix --disable-multilib --host=arm-linux --target=arm-linux

    8.1 --prefix=/mnt/ssd/gcc 指定安装目录

    8.2 --enable-languages=c,c++ 支持的编程语言

    8.3 --enable-threads=posix 使用posix/unix98作为支持线程库

    8.4 --disable-multilib 取消32位库编译

    8.5 --host --build --target 举例如下:

    --build=i686-pc-linux-gnu --host=arm --target=mips

    表示在pc上进行编译,编译运行在arm上的gcc,gcc生成mips指令架构的程序

    9.编译

    make -j10

    10.安装

    make install

    展开全文
  • 交叉编译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/binSYSROOT_DIR下。
    至于如何检查编译是否成功可以使用qemu来测试。
    具体看使用 qemu模拟arm开发板
    幸亏当初没脑子一热去学嵌入式…

    展开全文
  • linux交叉编译gcc4.8.3

    2019-06-27 11:51:49
    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.环境:

    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等依赖库

    ./contrib/download_prerequisites

    6.创建编译目录

    mkdir build

    7.切换到build目录

    cd build

    8.配置

    CC=arm-linux-gcc AR=arm-linux-ar ../configure --prefix=/mnt/ssd/gcc --enable-checking=release --enable-languages=c,c++ --enable-threads=posix --disable-multilib --host=arm-linux --target=arm-linux

    8.1 --prefix=/mnt/ssd/gcc 指定安装目录

    8.2 --enable-languages=c,c++ 支持的编程语言

    8.3 --enable-threads=posix 使用posix/unix98作为支持线程库

    8.4 --disable-multilib 取消32位库编译

    8.5 --host --build --target 举例如下:

    --build=i686-pc-linux-gnu --host=arm --target=mips

    表示在pc上进行编译,编译运行在arm上的gcc,gcc生成mips指令架构的程序

    9.编译

    make -j10

    10.安装

    make install

    转自:https://www.cnblogs.com/dakewei/p/7508116.html

    gcc/交叉编译

    一.gcc编译的情况:

    1.linux gcc包含的c/c++编译器,gcc和cc是一样的,c++和g++是一样的,一般c程序就用gcc编译,c++程序就用g++编译。


    2.linux gcc的应用:直接编译生成 a.out文件 -o 指定生成文件名字。


    3.linux gcc 编译时遇到"undefined reference to 'xxxxx'"的错误,不是编译出错,是连接出错,没有指定链接程序要用到的库。比如数学函数库要

    加-lm ,数据库库要加 -lsqlite3,线程函数库要加 -lpthread 等。
    分析:-l参数就是用来指定程序要链接的库,-l参数紧接着就是库名,比如数学库,他的库名是m,他的库文件名是libm.so,很容易看出,把库文件名的头lib和尾.so去掉就是库名。
         当我们自已要用到一个第三方提供的库名字libtest.so,那么我们只要把libtest.so拷贝到/usr/lib里,编译时加上-ltest参数,我们就能用上libtest.so库了(当然要用libtest.so库里的函数,我们还需要与libtest.so配套的头文件)。在/lib和 /usr/lib和/usr/local/lib里的库直接用-l参数就能链接了,但如果库文件没放在这三个目录里,而是放在其他目录里,这时我们只用 -l参数的话,链接还是会出错,

    出错信息大概是:“/usr/bin/ld: cannot find -lxxx”,也就是链接程序ld在那3个目录里找不到libxxx.so,这时另外一个参数-L就派上用场了,比如常用的X11的库,它在/usr /X11R6/lib目录下,我们编译时就要用-L/usr/X11R6/lib -lX11参数,-L参数跟着的是库文件所在的目录名。再比如我们把libtest.so放在/aaa/bbb/ccc目录下,那链接参数就是-L /aaa/bbb/ccc -ltest


    4.linux gcc 编译时遇到"xxxx.h: No such file or directory"的错误
         -I参数是用来指定头文件目录,/usr/include目录一般是不用指定的,gcc知道去那里找,但是如果头文件不在/usr/include里我们就要用-I参数指定了,比如头文件放在/myinclude目录里,那编译命令行就要加上-I/myinclude参数了。


    5.linux gcc 程序优化参数
    一般用-O2就是,用来优化程序用的,比如gcc test.c -O2,优化得到的程序比没优化的要小,执行速度可能也有所提高。


    6.linux下的交叉编译工具和使用方法(平台移植和嵌入式开发时用到)
    我们平常做的编译就叫本地编译,也就是在当前平台编译,编译得到的程序也是在本地执行,在本地机器上编译程序到其
    他机器上的编译器就叫交叉编译器,
    使用方法跟本地的gcc差不多,但有一点特殊的是:必须用-L和-I参数指定编译器用第三方系统的库和头文件,不能用本
    地(X86)的库(头文件有时可以用本地的)
       例子:sparc-xxxx-linux-gnu-gcc test.c -L/path/to/sparcLib -I/path/to/sparcInclude
    Linux 中最重要的软件开发工具是 GCC。GCC 是 GNU 的 C 和 C++ 编译器。实际上,GCC 能够编译三种语言:C、C++
    和 Object C(C 语言的一种面向对象扩展)。利用 gcc 命令可同时编译并连接 C 和 C++ 源程序。
       GCC 可同时用来编译 C 程序和 C++ 程序。一般来说,C 编译器通过源文件的后缀名来判断是 C 程序还是 C++
    程序。在 Linux 中,C 源文件的后缀名为 .c,而 C++ 源文件的后缀名为 .C 或 .cpp。
       gcc 命令只能编译 C++ 源文件,而不能自动和 C++ 程序使用的库连接。因此,通常使用 g++ 命令来完成 C++
    程序的编译和连接,该程序会自动调用 gcc 实现编译。
      -ansi 只支持 ANSI 标准的 C 语法。这一选项将禁止 GNU C 的某些特色,例如 asm 或 typeof 关键词。
      -c 只编译并生成目标文件。
      -DMACRO 以字符串“1”定义 MACRO 宏。
      -DMACRO=DEFN 以字符串“DEFN”定义 MACRO 宏。
      -E 只运行 C 预编译器。
      -g 生成调试信息。GNU 调试器可利用该信息。
      -IDIRECTORY 指定额外的头文件搜索路径DIRECTORY。
      -LDIRECTORY 指定额外的函数库搜索路径DIRECTORY。
      -lLIBRARY 连接时搜索指定的函数库LIBRARY。
      -m486 针对 486 进行代码优化。
      -o FILE 生成指定的输出文件。用在生成可执行文件时。
      -O0 不进行优化处理
      -O 或 -O1 优化生成代码。
      -O2 进一步优化。
      -O3 比 -O2 更进一步优化,包括 inline 函数。
      -shared 生成共享目标文件。通常用在建立共享库时。
      -static 禁止使用共享连接。
      -UMACRO 取消对 MACRO 宏的定义
      -w 不生成任何警告信息。
      -Wall 生成所有警告信息。

    7.build,host,target的含义
    【build】当前你使用的计算机。

    【host】你的目的是编译出来的程序可以在host上运行。

    【target】普通程序没有这个概念。对于想编译出编译器的人来说此属性决定了新编译器编译出的程序可以运行在哪!
    如:
    我要在FL2440arm开发板上写点程序,但是因为在板子上调试麻烦,我不想在arm开发板上开发编译,于是我就想在自己电脑上
    开发然后copy过去给它用。这时我就需要一个在我的x86(build)上编译一个“可以在我x86(host)本机上运行的gcc,这个新gcc
    编出来的程序是可以在arm(target)上运行的”。 此时选项为 build=x86,host=x86,target = arm。
    此时我用这个gcc编译一个helloworld,这个helloworld的build=x86,host=arm

     

    二.以configure --host=arm-linux 命令也可以交叉编译

    展开全文
  • 暂时忘记,导致ls命令执行报错,于是编译执行失败,ldd命令查看gcc的链接库,发现有ld-linux的软链接路径是一个非本机路径,应该是sdk提供者的目录。将ls命令执行路径修改,参数作为目标路径后初始化就成功,gcc命令...
  • 在ubuntu12.04交叉编译gcc for avr(1)

    千次阅读 2012-09-21 23:34:29
    在ubuntu12.04上面交叉编译gcc for avr,也就是我们所说的avr-gcc。 在安装之前需要准备的工具,gcc-core-4.5.1 bintils-2.20 avr-libc-1.8.0 还有必须要安装的工具,及库:gmp-4.3.2 mpfr-2..4.2 mpc-0.8.1 还要...
  • eclipse 交叉编译 gcc g++ as的路径配置

    千次阅读 2014-09-18 17:41:30
    交叉编译就是说在一个平台上编译在另一个平台
  • 在下载gcc for arm的时候,往往会有很多个版本: 这些版本的区别是什么?我该下载哪个版本? 区别无外乎几个:大端 or 小端、ARMv7 or ARMv8、32位 or 64位、裸机 or 嵌入式Linux multiarch name ...
  • 制作交叉编译gcc时出错

    千次阅读 2007-05-21 12:35:00
    /mygod/gcc-4.2.0/host-i686-pc-linux-gnu/gcc/xgcc -B/mygod/gcc-4.2.0/host-i686-pc-linux-gnu/gcc/ -B/mygod/arm/arm-linux/bin/ -B/mygod/arm/arm-linux/lib/ -isystem /mygod/arm/arm-linux/include -isystem ...
  • 一、临时添加 : 进入到已经下载好的编译工具目录 (一)展示当前目录: pwd (二)展示当前环境变量 :echo $PATH (三) export PATH=(以冒号为界点,+你想要加的路径) 二、永久添加 : (1)用cd 退出到 最开始主...
  • am3352交叉编译工具 gcc

    2018-11-19 17:51:11
    am3352的交叉编译工具链!am3352的交叉编译工具链!am3352的交叉编译工具链!
  • arm-linux交叉编译工具,用于arm系列开发板编译boot和linux内核
  • gcc编译和交叉编译 如果您是创建二进制程序包(例如RPM,DEB,Flatpak或Snap)的开发人员,则必须为各种不同的目标平台编译代码。 典型目标包括32位和64位x86和ARM。 您可以在不同的物理或虚拟机上进行构建,但这...
  • 本文使用linaro公司制作的交叉编译gcc源代码进行安装,那种制作好的交叉编译工具链安装不是咱的追求,不在学习范围。 网上有很多安装说明都是针对现成的工具链安装,而且语焉不详,很多问题没有讲解清楚。使用源码...
  • 注意:单gcc表示非交叉编译,编译出来的可执行文件hello,只能在当前主机(x86架构)上运行。 为何能直接运行gcc命令,因为在/usr/bin/下存在gcc运行程序,并且/usr/bin/已存于环境变量$PATH中。 注意:若程序中...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,818
精华内容 2,727
关键字:

交叉编译gcc