专栏首页悟空被FFmpeg玩定制交叉编译环境-gcc

定制交叉编译环境-gcc

首先做一下binutils

  1. [root@T-bagwell binutils-2.21]# ./configure --build=i686-pc-linux-gnu --target=arm-linux --prefix=/usr/local/arm/gcc-4.6.0/ --disable-nls --enable-shared --disable-multilib
  2. [root@T-bagwell binutils-2.21]# make configure-host
  3. [root@T-bagwell binutils-2.21]# make
  4. [root@T-bagwell binutils-2.21]# make install
  5. [root@T-bagwell binutils-2.21]# cp -vp include/libiberty.h /usr/local/arm/gcc-4.6.0/include

然后安装mpc,mpfr,gmp,要不会报错

  1. configure: error: Building GCC requires GMP 4.2+, MPFR 2.3.1+ and MPC 0.8.0+.
  2. Try the --with-gmp, --with-mpfr and/or --with-mpc options to specify
  3. their locations. Source code for these libraries can be found at
  4. their respective hosting sites as well as at
  5. ftp://gcc.gnu.org/pub/gcc/infrastructure/. See also
  6. http://gcc.gnu.org/install/prerequisites.html for additional info. If
  7. you obtained GMP, MPFR and/or MPC from a vendor distribution package,
  8. make sure that you have installed both the libraries and the header
  9. files. They may be located in separate packages.

下载并安装gmp.mpfr,mpc就可以了

  1. [root@T-bagwell mnt]# wget ftp://gcc.gnu.org/pub/gcc/infrastructure/mpc-0.8.1.tar.gz
  2. [root@T-bagwell mnt]# wget ftp://gcc.gnu.org/pub/gcc/infrastructure/gmp-4.3.2.tar.bz2
  3. [root@T-bagwell mnt]# wget ftp://gcc.gnu.org/pub/gcc/infrastructure/mpfr-2.4.2.tar.bz2
  4. [root@T-bagwell mnt]# tar zxvf mpc-0.8.1.tar.gz
  5. [root@T-bagwell mnt]# tar jxvf gmp-4.3.2.tar.bz2
  6. [root@T-bagwell mnt]# tar jxvf mpfr-2.4.2.tar.bz2

然后接着开始编译

  1. [root@T-bagwell mnt]# cd gmp-4.3.2
  2. [root@T-bagwell gmp-4.3.2]# ./configure --prefix=/usr/local/ --enable-shared
  3. [root@T-bagwell gmp-4.3.2]# make;make install
  4. [root@T-bagwell gmp-4.3.2]# cd ..;cd mpfr-2.4.2
  5. [root@T-bagwell mpfr-2.4.2]# ./configure --prefix=/usr/local/ --enable-shared --with-gmp=/usr/local/lib
  6. [root@T-bagwell mpfr-2.4.2]# make;make install
  7. [root@T-bagwell mpfr-2.4.2]# cd ..;cd mpc-0.8.1
  8. [root@T-bagwell mpc-0.8.1]# ./configure --prefix=/usr/local --with-gmp=/usr/local/lib --with-mpfr=/usr/local/lib
  9. [root@T-bagwell mpc-0.8.1]# make;make install
  10. [root@T-bagwell mpc-0.8.1]# cd ..

然后编译gcc

  1. [root@T-bagwell gcc-build]# AR=ar LDFLAGS="-Wl,-rpath,/usr/local/lib" ../gcc-4.6.0/configure --build=i686-pc-linux-gnu --host=i686-pc-linux-gnu --target=arm-linux --prefix=/usr/local/arm/gcc-4.6.0 --disable-shared --enable-static --enable-languages=c --without-headers --disable-threads --disable-multilib --disable-nls --disable-decimal-float --disable-libgomp --disable-libmudflap --disable-libssp --without-headers --with-newlib
  2. [root@T-bagwell gcc-build]# make all-gcc all-target-libgcc
  3. [root@T-bagwell gcc-build]# make install-gcc install-target-libgcc

这样,交叉编译器就做好了,看一下

  1. [root@T-bagwell gcc-build]# arm-linux-gcc -v
  2. Using built-in specs.
  3. COLLECT_GCC=arm-linux-gcc
  4. COLLECT_LTO_WRAPPER=/usr/local/arm/gcc-4.6.0/libexec/gcc/arm-linux/4.6.0/lto-wrapper
  5. Target: arm-linux
  6. Configured with: ../gcc-4.6.0/configure --build=i686-pc-linux-gnu --host=i686-pc-linux-gnu --target=arm-linux --prefix=/usr/local/arm/gcc-4.6.0 --disable-shared --enable-static --enable-languages=c --without-headers --disable-threads --disable-multilib --disable-nls --disable-decimal-float --disable-libgomp --disable-libmudflap --disable-libssp --without-headers --with-newlib
  7. Thread model: single
  8. gcc version 4.6.0 (GCC)
  9. [root@T-bagwell gcc-build]# ls /usr/local/arm/gcc-4.6.0/bin/
  10. addr2line            arm-linux-c++filt    arm-linux-gcov    arm-linux-objcopy  arm-linux-strings  event_rpcgen.py  objcopy  phar        phpize   strip
  11. ar                   arm-linux-cpp        arm-linux-gprof   arm-linux-objdump  arm-linux-strip    gprof            objdump  phar.phar   ranlib
  12. arm-linux-addr2line  arm-linux-elfedit    arm-linux-ld      arm-linux-ranlib   as                 ld               pear     php         readelf
  13. arm-linux-ar         arm-linux-gcc        arm-linux-ld.bfd  arm-linux-readelf  c++filt            ld.bfd           peardev  php-cgi     size
  14. arm-linux-as         arm-linux-gcc-4.6.0  arm-linux-nm      arm-linux-size     elfedit            nm               pecl     php-config  strings
  15. [root@T-bagwell gcc-build]#

可以交叉编译一下linuxkernel试试

  1. [root@T-bagwell gcc-build]# cd /media/mnt/linux-2.6/
  2. [root@T-bagwell linux-2.6]# git branch
  3. LiuQi
  4. master
  5. * s3c2440
  6. [root@T-bagwell linux-2.6]#
  7. [root@T-bagwell linux-2.6]# cp arch/arm/configs/mini2440_defconfig /media/mnt/linux-2.6/KERNEL_OBJ/.config
  8. [root@T-bagwell linux-2.6]# make ARCH=arm CROSS_COMPILE=arm-linux- O=/media/mnt/linux-2.6/KERNEL_OBJ zImage

编译完成以后,可以看一下编译出来以后的文件

  1. [root@T-bagwell linux-2.6]# file KERNEL_OBJ/arch/arm/boot/compressed/vmlinux
  2. KERNEL_OBJ/arch/arm/boot/compressed/vmlinux: ELF 32-bit LSB executable, ARM, version 1, statically linked, not stripped
  3. [root@T-bagwell linux-2.6]#

搞定

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • RPM包制作方法

    最近有同学问我制作RPM包相关的问题,我发现我以前做过,但是忘记记录了,现在记录一下:

    用户3765803
  • 查找当前目录下的大于1M的文件的各种实现

    用户3765803
  • 配置OpenBSD中的Bash

    用户3765803
  • 如何root手机-记录我的第一次刷机

    平时自己学习Wifi知识,避免不了要测试抓log,所以一个root权限的手机很有必要,之前一直借用别人的手机,最近把自己的手机root了,这里记录一下。 我的...

    用户7557625
  • vex实现单文件组件的数据共享

    Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。Vu...

    十月梦想
  • 关于游戏制作

    我一直以为,游戏制作人是类似《红楼梦》作者,《巴黎圣母院》作者,《龙珠》作者一样,是一款游戏的“后缀”。

    沙因Sign
  • Docker和k8s的故障排除和监控利器 Weave-Scope服务

    Weave-Scope服务是一个用来监控docker容器、k8s等(包括宿主机)的资源使用状况的,从根本上来说,有些类似于Zabbix等监控服务,该服务式基于容...

    小手冰凉
  • 记一道贝叶斯公式的裸题

    上课好不容易听懂了,赶紧整理一下,不然以我的记性估计明天就要忘干净了 题目 一个用户所有邮件分为两类:$A_1$代表垃圾邮件, $A_2$代表非垃圾邮件 根据经...

    attack
  • 使用shell对文件重命名

    需要把上面2018年度下面的每个子目录的文件重命名,命名规则是就是改为1.jpg到n.jpg

    咪啪咪啪
  • CentOS自带Python被删 && YUM报错修复

    已存在的情况:CentOS7.3 系统自带Python2.7.5被删除,yum命令抛出 No module named yum

    lpe234

扫码关注云+社区

领取腾讯云代金券