频道直达 - 专题 - 新闻 - 技巧 - 组网 - 开发 - 安全 - web编程 - 图像 - 操作系统 - 数据库 - 教育 - 旅游 - 健康 - 时尚 - 驱动 - 软件 - 游戏 - 多媒体 - ERP - 讨论组

嵌入式:ARM下GCC交叉编译器的制作

来源: 作者:佚名 出处:巧巧读书 2007-12-21 进入讨论组
 1.下载所需文件
 
  以下是我在Cygwin环境下制作arm-gcc(uclibc)交叉编译器中所需要的文件:
 
  binutils-2.14.90.0.8
 
  uClibc-0.9.27
 
  gcc-3.4.2
 
  linux-libc-headers-2.4.29
 
  PS:一般来说这里还需要下一些patch,因为我对编译器的理解还不够,加上这个事情是工作内容,还有些其他的特殊需求,为了省麻烦,我用了一个很龌龊的方法。我将在linux环境下被buildroot打过补丁的源代码复制出来。
 
  注:通常制作交叉编译器的时候,源代码的版本是非常重要的。
 
  2.准备工作
 
  ${PREFIX}为安装目录;
 
  ${TARGET}为目标的体系结构,例如arm-linux;
 
  将${PREFIX}/${TARGET}下的sys-include链接到……/include目录;
 
  将${PREFIX}/${TARGET}下的lib链接到……/lib目录;
 
  将内核头文件中对应的asm(例如asm-arm)和linux目录复制到${PREFIX}/include下;
 
  修改内核头文件,比如在制作i386-arm交叉编译器时,需要在asm目录下的建立arch,proc对应的目录;
 
  修改环境变量
 
  export PATH=${PREFIX}/bin:${PATH}
 
  这个一定要记得,因为制作gcc交叉编译器时,需要用到此bin目录下的交叉二进制工具;
 
  接下来这步,是为uclibc库所做的,创建${PREFIX}/usr目录,将目录中的lib链接到……/lib,将目录中的include链接到……/include;
 
  接下来就准备开始制作交叉编译器了,制作交叉编译器一般分四步:
 
  制作交叉的二进制工具
 
  制作不带库的gcc交叉编译器
 
  用制作好的gcc交叉编译器将所需要的库编译
 
  重新编译带库的gcc交叉编译器
 
  以下是制作交叉编译器的步骤,因为我用的源代码是给buildroot打过补丁的,所以制作的参数会和通常的交叉编译器制作的参数有些不同。
 
  3.制作binutils
 
  制作交叉环境的二进制工具:
 
  ……/binutils-2.14.90.0.8/configure ——prefix=/staging_dir ——target=arm-linux-uclibc ——disable-nls ——enable-multilib ——disable-werror
 
  make
 
  make install
 
  4.制作gcc交叉编译器
 
  ……/gcc-3.4.2/configure ——prefix=/staging_dir ——target=arm-linux-uclibc ——enable-languages=c ——disable-shared ——with-sysroot=/sour-uc/uClibc_dev/ ——disable-__cxa_atexit ——enable-target-optspace ——with-gnu-ld ——disable-nls ——enable-multilib
 
  make
 
  make install
 
  注:如果是通常的制作,这里一般需要——without-headers ——disable-shared ——disable-threads,如果不是使用glibc库,还需要 ——with-newlib.
 
  5.编译uclibc库
 
  make menuconfig
 
  make CROSS=arm-linux-uclibc-
 
  make PREFIX="/staging_dir" install
 
  注:在menuconfig配置中,Library Installation Options的参数设置如下:
 
  (/lib) Shared library loader path
 
  (/) uClibc runtime library directory
 
  (/usr/) uClibc development environment directory
 
  在/staging_dir/usr目录下会生成include和lib两个目录,这两个目录会生成下一步制作gcc所需要的文件,已经被我们链接到相应的目录里去了。如果之前没有把目录链接到安装目录下的lib和include中,则下步编译gcc会出现许多错误,比如找不到crt?。o等等。
 
  6.重新制作gcc交叉编译器
 
  

../gcc-3.4.2/configure
--prefix=/staging_dir
--target=arm-linux-uclibc
--enable-languages=c
--enable-shared
--disable-__cxa_atexit
--enable-target-optspace
--with-gnu-ld --disable-nls
--enable-multilib
make
make install


 
  如果不出现编译错误,那么恭喜你,你距离成功就仅有一小步了。为什么这么说,因为你的gcc的specs文件可能还需要做一点简单的修改,因为编译的时候可能会遇到一些错误。比如我制作完成后,在编译so文件时,specs里的规则就会导致我无法编译。请保留地址 http://www.qqread.com/cpp/r388018.html 更多文章 更多内容请看.NET移动与嵌入式技术专题,或进入讨论组讨论。
收藏此文】【 】【打印】【关闭
较早的文章:解析C++虚函数表

较新的文章:Java语言和C++语言的差异
相关图文阅读
频道图文推荐
健 康 咨 询
时 尚 咨 询
巧巧读书宗旨
相关专题
讨论组问题推荐
站内各频道最新更新文档
站内最新制作专题
热门关键字导读
Photoshop教 程照片处理 照片制作 PS快捷键 抠图
计 算 机 故 障XP系统修复
艺 术 与 设 计设计 流媒体 设计欣赏 边框
计 算 机 安 全ARP
站内频道文章精选
巧巧电脑频道编辑信箱  告诉我们您想看的专题或文章