Linux下构建GCC交叉编译器全记录.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Linux下构建GCC交叉编译器全记录

Linux下构建GCC交叉编译器全记录 2010-12-15 21:18 〇、缘起 前不久做了个Damn Small Linux启动U盘,感觉很实用。美中不足是根文件系统一直是初始RAM盘,不能按需修改;要把DSL安装到U盘又需要200M空间,我的U盘只有128M。一怒之下,决定自己做一个LFS(Linux From Scratch),开源精神不是支持自己动手么。计划是构建一个兼容i586(Pentium, Celeron)以上架构的小型系统,完全包含在U盘里。我所用的机器是x86_64架构,因此LFS的第一步是构建一个到i586的交叉编译器。 Cross-Compile Linux From Scratch是关于交叉编译Linux的详尽文档,开头包括了构建交叉编译器的详细介绍。但是所用的源代码版本有些已颇旧,而且步骤也略嫌繁琐,我决定用新版本的源代码自己探索一下。 ? 一、准备编译环境 构建过程运行在Fedora 14 Linux上,CPU Intel Core 2 Duo,内核版本 (x86_64)。要编译交叉编译器首先需要一个编译器,这里就是GCC(4.5.1)。另外,编译GCC还需要MPFR、GMP、MPC三个库,安装之。当然一干构建工具如make、autoconf等是不可或缺的,就不赘述了。 为了构建过程清晰,源代码和目标文件尽量分开放置,因此在用户目录下创建目录src放置源代码,cross-build放置目标代码。 mkdir ~/src mkdir ~/cross-build 我准备把交叉编译器安装到/usr/local目录下,为简化配置命令,创建一个脚本~/cross-build/setenv设置环境变量,内容如下: PREFIX=/usr/local PATH=${PREFIX}/bin:/bin:/usr/bin TOOLS=`pwd`/tools HOST=$MACHTYPE TARGET=i586-linux 如果构建工作中途停止,关机重启,或者其他干扰,继续之前先运行此脚本重设环境。 cd ~/cross-build . setenv ? 二、下载源代码 需要下载Binutils、GCC、Glibc的源代码,源代码包位于GNU的FTP( HYPERLINK / \t _blank /)上。这里下载的是Binutils 2.21、GCC 4.5.1和Glibc 2.11.3。因为我的目标平台是Linux,编译Glibc还需要Linux的源代码,可以从 HYPERLINK / \t _blank /获取。 wget /gnu/binutils/binutils-2.21.tar.bz2 wget /gnu/gcc/gcc-4.5.1/gcc-4.5.1.tar.bz2 wget /gnu/glibc/glibc-2.11.3.tar.bz2 wget /pub/linux/kernel/v2.6/linux-.tar.bz2 ? 三、编译Binutils 整个构建过程分四大步,依次为Binutils,静态GCC,Glibc,最终(带Glibc的)GCC,后面的工作依赖于前面的结果。Binutils包含交叉编译器必需的汇编器、链接器、archiver(打包器?)和其他各种工具。首先解压源代码到~/src。 tar xjf binutils-2.21.tar.bz2 -C ~/src 在~/cross-build目录下为Binutils目标文件创建一个目录,然后切换到该目录。 mkdir ~/cross-build/binutils cd ~/cross-build/binutils 配置为交叉编译,--target指明编译出来的工具可以处理的体系结构,而不是它们将要运行在的体系结构。这里构建的是交叉编译器,编译器的运行环境(宿主host)和目标程序的运行环境(目标机target)是不同的,但是编译交叉编译器的工具的运行环境(build)和宿主是一样的(至少这里是)。 ~/src/binutils-2.21/configure --prefix=$PREFIX --target=$TARGET --disable-nls make -j 2 21 | tee make.out -j 2 选项使GNU make并行编译,21 把错误输出重定向到标准输出,然后用tee存入文件make.out。 sudo make -j 2 install 四、编译静态GCC 一个完整的交叉编译器必须带有标准C库,这里选择Glibc,而为了编译Glibc,又必须先有一个交叉编译器。解决的办法是先编译一个受限的、不带C库的交叉编译器,然后用它来编译Glibc,最后再携同Glibc一齐编译完整的交叉编译器。这一步就是编译一个受

文档评论(0)

fd982626 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档