Cygwin下用crosstool-ng编译交叉工具链.doc
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Cygwin crosstool ng 编译 交叉 工具
- 资源描述:
-
Cygwin下用crosstool-ng 编译交叉工具链 Cywin版本:1.7.7(CYGWIN_NT-5.1) Crosstool-ng版本:1.9.3 操作系统:Windows XP SP3 一、下载crosstool-ng crosstool-ng的下载地址是:http://ymorin.is-a-geek.org/download/crosstool-ng/ 值得注意的是,下载里最新的crosstool-ng以后,记得到 http://ymorin.is-a-geek.org/download/crosstool-ng/01-fixes/ 看看有没有相应的补丁,有得话一起下载下来。 本次下载的版本是 1.9.3 无 patch。 二、准备crosstool-ng的安装环境 使用crosstool-ng必须安装一些开发应用工具: grep,sed,bash,make,gcc,awk,bison,flex,makeinfo,automake,libtool,curl,cvs,patch,gzip,bzip2,liblzma1,ncurses(对应的库也要装上) 三、安装crosstool-ng $ mkdir ~/croosstool-ng # 在当前用户目录下建立croosstool-ng目录 $ cd ~/croosstool-ng $ mv /tmp/crosstool-ng-1.9.3.tar.bz2 ./ #把下载的crosstool-ng软件包放到 crosstool-ng目录中 $ tar -jxvf crosstool-ng-1.9.3.tar.bz2 # 解包 $ cd crosstool-ng-1.9.3 # 进入解压目录 $ patch -p1 < <补丁文件> # 给crosstool-ng打补丁(如果有) $ ./configure --prefix=/opt/crosstool-ng # 配置crosstool-ng $ make # 编译crosstool-ng $ make install # 安装crosstool-ng $ echo "PATH=$PATH:/opt/crosstool-ng/bin" >> ~/.bashrc # 为后面调用ct-ng命令增加环境变量 $ source ~/.bashrc $ ct-ng help This is crosstool-NG version 1.9.3 Copyright (C) 2008 Yann E. MORIN <yann.morin.1998@anciens.enib.fr> This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 到此,我们已经成功迈出一大步,好戏还在后头,加油~! 四、配置交叉编译工具链 $ cd ~/croosstool-ng $ mkdir crosstool-ng-1.9.3_build # 建立一个交叉工具链的输出目录 $ mkdir src # 建立保存源码包目录 $ mkdir x-tools # 建立交叉编译器的安装路径 $ cd crosstool-ng-1.9.3_build/ $ cp /opt/crosstool-ng/lib/ct-ng-1.9.3/samples/arm-unknown-linux-gnueabi/crosstool.config .config $ ct-ng menuconfig 此时会出现crosstool-ng的配置窗口,针对armv4t体系架构,开始对其进行修改配置: 1、已下载好的源码包路径和交叉编译器的安装路径。 Paths and misc options ---> (${HOME}/crosstool-ng/src) Local tarballs directory 保存源码包路径 (${HOME}/crosstool-ng/x-tools/${CT_TARGET}) Prefix directory 交叉编译器的安装路径 2、修改交叉编译器针对的构架 Target options ---> *** Target optimisations *** (armv4t) Architecture level (arm9tdmi) Emit assembly for CPU (arm920t) Tune for CPU 通过查找资料,这个应该是指令集的架构,对于S3C2410/S3C2440,都是ARM920T的核心,架构指令是armv4t,所以,如果要编译2410/2440的,就选armv4t。以此类推S3C6410 ARM1176JZF-S核心 使用的是armv6架构,就选armv6,那么具体都支持哪些架构呢?可以用man gcc来查询,搜索arm,再搜索-march=就可以找到本gcc支持的处理器核心列表了。 3、增加编译时的并行进程数,以增加运行效率,加快编译。 Paths and misc options ---> *** Build behavior *** (4) Number of parallel jobs 这个数值不宜过大,应该为CPU数量的两倍。由于我的CPU是双核的,所以我填了4. 4、一些个性化的修改(可以不修改) Toolchain options ---> *** Tuple completion and aliasing *** (apollo) Tuple's vendor string 这样产生的编译器前缀就是:arm-apollo-linux-gnueabi- 5、C compiler ---> (crosstool-NG-${CT_VERSION}-apollo) gcc ID string 以上红色字体部分即为修改之处。 以上步骤基本都是直接从 《在fedora12下用crosstool-ng建立arm-linux交叉编译环境 》copy,只对少部分做了修改。 五、其它配置: 这些都是根据我自己的需要添加的,所以和上面的步骤分开单独写。 1、设置croostool-NG调试标记 Paths and misc options ---> ***crosstool-Ng behavior*** [*]Debug crosstool-NG # [*]Save intermediate steps #保存编译过程中的中间步骤,在没选中上一项之前,这一项不出现。 如果你足够幸运,第一次就能编译通过,这一步就没有必要选。如果很不幸,中间出现了错,这一步就显得相当重要了,可以让节省很多时间。因为有了这一项,在编译的过程中,croostool-ng会记录下每一步的状态。这样在对出现的错误进行纠正后,就可以从出错这一步开再继续编译,当然你也可以从任一个已保存的状态点开始。如果没有选这一项的话,每出错一次就要从头重新开始编译,这可是相当浪费时间。 2、设置其他支持的语言 C compiler ---> *** Additional supported languages:*** [*] C++ [ ] Fortran [ ] Java 这里我只选了C++,把Fortran,Java去掉了。如果选上Java的话在编译到 Installing final compiler 这一步时会出错,我第一次是在linux下编译的,因为我不需要支持Java,所以我就直接把Java这一项去掉了,没有找解决方法。 3、配置交叉工具链里的调试工具 Debug facilitites ---> [ * ] dmalloc ---> [ * ] duma ---> [ * ] gdb ---> [ ] ltrace ---> # ltrace 目前只支持linux系统 [ * ] strace ---> 六、准备源码编译 虽然crosstool-ng有自动下载源码的功能,但速度非常慢,还是建议自己把源码下载过来。 binutils-2.19.1.tar.bz2 dmalloc-5.5.2.tgz duma_2_5_15.tar.gz expat-2.0.1.tar.gz gcc-4.3.2.tar.bz2 gdb-6.8.tar.bz2 glibc-2.9.tar.bz2 glibc-ports-2.9.tar.bz2 gmp-4.3.2.tar.bz2 libelf-0.8.13.tar.gz linux-2.6.33.7.tar.bz2 mpfr-2.4.2.tar.bz2 ncurses-5.7.tar.gz Sstrip.c strace-4.5.19.tar.bz2 如果上面的链接失效,你可以通过 http://www.kernel.org/pub/linux/kernel/ http://ftp.gnu.org/gnu/ 下载到大部分所需要的源码,其他再百度或Google就可以轻松搞定。 下面还不能编译,因为还有重要的一步没有做: 修改duma_2_5_15.tar.gz的Makefile文件 $ tar -zxvf duma_2_5_15.tar.gz $ cd duma_2_5_15 打开“GNUmakefile”,添加对cygwin的支持,也就是添加下面红色的一句 # some defaults: CC=gcc CXX=g++ AR=ar RANLIB=ranlib INSTALL=install RM=rm RMFORCE=rm -f ECHO=echo ECHOLF=echo OS=cygwin 接下来重新把duma_2_5_15打包 $ cd .. $ tar -zcvf duma_2_5_15.tar.gz duma_2_5_15 为什么要这样做可以参看duma_2_5_15下的INSTALL文件 下面把所有的源码放到 /home/Administrator/crosstool-ng/src 目录下,也就是上面创建的src目录 下面就可以开始编译了 Ct-ng build.4 4代表同时运行4个进程进行编译。 下面就是漫长的等待了。 七、增加环境变量 $echo "PATH=$PATH:$HOME/crosstool-ng/x-tools/arm-apollo-linux-gnueabi/bin" >> ~/.bashrc。 OK,大功造成,是否该测试一下呢,简单: $ arm-apollo-linux-gnueabi-gcc -v Using built-in specs. Target: arm-apollo-linux-gnueabi Configured with: /home/Administrator/ct-ng-1.9.3/crosstool-ng/crosstool-ng-1.9.3_build/ targets/src/gcc-4.3.2/configure --build=i686-build_pc-cygwin --host=i686-build_pc-cygwin --target=arm-apollo-linux-gnueabi --prefix=/home/Administrator/ct-ng-1.9.3/crosstool-ng/x-tools/ arm-apollo-linux-gnueabi --with-sysroot=/home/Administrator/ct-ng-1.9.3/crosstool-ng/x-tools/ arm-apollo-linux-gnueabi/arm-apollo -linux-gnueabi//sys-root --enable-languages=c,c++ --disable-multilib -with-arch=armv4t --with-cpu=arm9tdmi --with-tune=arm920t --with-float=soft --with-pkgversion=crosstool-NG-1.9.3-apollo --disable-sjlj-exceptions --enable-__cxa_atexit --disable-libmudflap --disable-libgomp --disable-libssp --with-gmp=/home/Administrator/ct-ng-1.9.3/crosstool-ng/crosstool-ng-1.9.3_build/targets/arm-apollo-linux-gnueabi/build/static --with-mpfr=/home/Administrator/ct-ng-1.9.3/crosstool-ng/crosstool-ng-1.9.3_build/targets/ arm-apollo-linux-gnueabi/build/static --enable-threads=posix --enable-target-optspace --with-local-prefix=/home/Administrator/ct-ng-1.9.3/crosstool-ng/x-tools/arm-apollo-linux-gnueabi/arm-apollo-linux-gnueabi//sys-root - -disable-nls --enable-symvers=gnu --enable-c99 --enable-long-long Thread model: posix gcc version 4.3.2 (crosstool-NG-1.9.3-apollo) 八、错误及解决方法 1、配置crosstool-ng产生的错误 1.1 ncurses headers files were not found Checking for 'ncurses/ncurses.h'... no Checking for 'ncurses/curses.h'... no Checking for 'ncurses.h'... no Checking for 'curses.h'... no ncurses headers files were not found 解决方法: 安装:ncurses,、libncurses-devel 1.2 flex none found Checking for 'flex'... No flex: none found Either you are missing entirely the needed tool, or the version you have is too old. configure: Bailing out... 解决方法: 安装:flex,flexdll 1.3 automake 1.10 or above was not found Checking for 'automake'... no automake 1.10 or above was not found Either you are missing entirely the needed tool, or the version you have is too old. configure: Bailing out... 解决方法: 安装:automake 1.4 libtool 1.5.26 or above was not found Checking for 'libtool'... no libtool 1.5.26 or above was not found Either you are missing entirely the needed tool, or the version you have is too old. You can give the path to this tool using: --with-libtool=PATH configure: Bailing out... 解决方法: 安装:libtool 注: 在配置crosstool-NG时,出现的类似“XXX:none found”的错误,都可以是该工具没有安装,把该工具安装上,重新配置即可。 1.5 ct-ng help命令检查时出错 crosstool-ng 安装成功后,用ct-ng help命令检查时,不认识该命令 这多半是添加环境变量失败造成的,这时可以打开 /home/Administrator 目录下的.bashrc查看是否把windows里的其他环境变量添加到了.bashrc文件中,如果把多余的去掉,只保留cgywin自己的环境变量,如下所示: PATH=/usr/local/bin:/usr/bin:/bin:/opt/crosstool-ng-1.9.3/bin 1.6 配置时的其他错误 在配置crosstool-NG时,也即执行 ./configure --prefix=/opt/crosstool-ng 出现的类似“XXX:none found”的错误,都是相应工具没有安装造成的,重新运行setup.exe把该工具安装上,再执行该命令,即可。 2、编译交叉工具链产生的错误 2.1 targets' is *not* case-sensitive Cygwin窗口的错误信息: $ ct-ng build [INFO ] Performing some trivial sanity checks [ERROR] Your file system in '/home/Administrator/croosstool-ng/crosstool-ng-1.9.3/targ ets' is *not* case-sensitive! [00:02] / make: *** [build] Error 1 unix 和Linux都是区分大小写的,cygwin既然是模拟unix环境,当然也是区分大小定的。 这个问题好解决,修改一下注册表就行了。 打开注册表,找到如下位置: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\ Session Manager\Kernel 把“obcaseinsensitive”的值改为0,再重新启动电脑,cygwin下就区分大小写了。 如果觉得麻烦,可以把如下代码复制到记事本里(case-sensitive.txt): Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\kernel] "obcaseinsensitive"=dword:00000000 然后把记事本的后缀名改为.reg,(case-sensitive.reg),双击reg(case-sensitive.reg)文件即可,和上面的效果一样。 2.1 Installing static core C compiler failed Cygwin窗口的错误信息: [INFO ] Installing static core C compiler [EXTRA] Configuring static core C compiler [ERROR] checking for C compiler default output file name... configure: error: C compiler cannot create executablesconf.tab.o [ERROR] Build failed in step 'Installing static core C compiler' [ERROR] Error happened in '/opt/crosstool-ng/lib/ct-ng-1.9.1/scripts/functions' in function 'CT_DoExecLog' (line unknown, sorry)x.o [ERROR] called from '/opt/crosstool-ng/lib/ct-ng-1.9.1/scripts/build/cc/gcc.sh' at line # 2 03 in function 'do_cc_core'il.o [ERROR] called from '/opt/crosstool-ng/lib/ct-ng-1.9.1/scripts/build/cc/gcc.sh' at line # 5 2 in function 'do_cc_core_pass_1' [ERROR] called from '/opt/crosstool-ng/lib/ct-ng-1.9.1/ scripts/crosstool-NG.sh' at line # 5 97 in function 'main' [ERROR] Look at '/home/Administrator/crosstool-ng/x-tools /arm-apollo-linux-gnueabi/build.log' for more info on this error. 解决办法: 安装gcc4-g++,在编译的时候时需要C++的 参考: 2.2 Build failed in step 'Installing D.U.M.A.' Cygwin窗口的错误信息: [INFO ] Installing D.U.M.A. [EXTRA] Copying sources [ERROR] Build failed in step 'Installing D.U.M.A.' [ERROR]Error happened in '/opt/crosstool-ng-1.9.3/lib/ct-ng-1.9.3/scripts/build/ debug/200-duma.sh' in function 'do_debug_duma_build' (line unknown, sorry) [ERROR] called from '/opt/crosstool-ng-1.9.3/lib/ct-ng-1.9.3/scripts/build/debug.sh' at line # 35 in function 'do_debug' [ERROR] called from '/opt/crosstool-ng-1.9.3/lib/ct-ng-1.9.3/scripts/crosstool-NG.sh' at line # 597 in function 'main' [ERROR] Look at '/home/Administrator/ct-ng-1.9.3/crosstool-ng/x-tools/ arm-apollo-linux-gnueabi/build.log' for more info on this error. [ERROR] (elapsed: 479:03.42) [479:07] / make: *** [build] Error 1 Build.log中的提示如下: [INFO ] Installing D.U.M.A. [EXTRA] Copying sources [ERROR] Build failed in step 'Installing D.U.M.A.' [ERROR] Error happened in '/opt/crosstool-ng-1.9.3/lib/ct-ng-1.9.3/scripts/build/debug/ 200-duma.sh' in function 'do_debug_duma_build' (line unknown, sorry) [ERROR] called from '/opt/crosstool-ng-1.9.3/lib/ct-ng-1.9.3/scripts/build/debug.sh' at line # 35 in function 'do_debug' [ERROR] called from '/opt/crosstool-ng-1.9.3/lib/ct-ng-1.9.3/scripts/crosstool-NG.sh' at line # 597 in function 'main' [ERROR] Look at '/home/Administrator/ct-ng-1.9.3/crosstool-ng/x-tools/ arm-apollo-linux-gnueabi/build.log' for more info on this error. [ERROR] (elapsed: 479:03.42) 解决方法: 修改DUMA的Makefile文件: $ tar -zxvf duma_2_5_15.tar.gz #解压源码包 $ cd duma_2_5_15 打开“GNUmakefile”,添加对cygwin的支持,也就是添加下面红色的一句 # some defaults: CC=gcc CXX=g++ AR=ar RANLIB=ranlib INSTALL=install RM=rm RMFORCE=rm -f ECHO=echo ECHOLF=echo OS=cygwin 接下来重新把duma_2_5_15打包 $ cd .. $ tar -zcvf duma_2_5_15.tar.gz duma_2_5_15 #重新压缩源码 这个错误让我郁闷了几天,因为在build.log文件里的信息也没说出问题可能出在什么地方。 最后才在INSTALL文件里发现如果是在cygwin下编译需要修改Makefile文件 INSTALL文件的部分内容: his documents describes if and how the library is installed on your system. I. Linux/Unix environments (including Cygwin and MinGW): Configure the options by editing the Makefile. Read carefully the description of options at top of the Makefile. Take care for the special OS/OSTYPE depending sections. Especially if you are going to use the LD_PRELOAD mechanism. Call GNU make often called 'gmake' for building the library. GNU make is called 'mingw32-make' for MinGW. Add option 'OSTYPE=msys' when calling make for MinGW. Add option 'OSTYPE=cygwin' when calling make for Cygwin. Add option 'OS=osx' when calling make for MacOS X or Darwin. Add option 'OS=freebsd' when calling make for FreeBSD. Add option 'OS=netbsd' when calling make for NetBSD. Add option 'OS=solaris' when calling make for Solaris. 2.3 Build failed in step 'Installing ltrace' Cygwin窗口的错误信息: [INFO ] Installing ltrace [EXTRA] Copying sources to build dir [EXTRA] Configuring ltrace [EXTRA] Building ltrace [ERROR] make[1]: *** [sysdeps/sysdep.o] Error 2 [ERROR] Build failed in step 'Installing ltrace' [ERROR] Error happened in '/opt/crosstool-ng-1.9.3/lib/ct-ng-1.9.3/scripts/functions' in function 'CT_DoExecLog' (line unknown, sorry) [ERROR] called from '/opt/crosstool-ng-1.9.3/lib/ct-ng-1.9.3/scripts/build/debug/400-ltrace.sh' at line # 52 in function 'do_debug_ltrace_build' [ERROR] called from '/opt/crosstool-ng-1.9.3/lib/ct-ng-1.9.3/scripts/build/debug.sh' at line # 35 in function 'do_debug' [ERROR] called from '/opt/crosstool-ng-1.9.3/lib/ct-ng-1.9.3/scripts/crosstool-NG.sh' at line # 597 in function 'main' [ERROR] Look at '/home/Administrator/ct-ng-1.9.3/crosstool-ng/x-tools/ arm-apollo-linux-gnueabi/build.log' for more info on this error. [ERROR] (elapsed: 591:35.21) [591:39] / make: *** [build] Error 2 Build.log中的提示如下: [ALL ] make[1]: Entering directory `/home/Administrator/ct-ng-1.9.3/crosstool-ng/ crosstool-ng-1.9.3_build/ targets/arm-apollo-linux-gnueabi/build/build-ltrace' [ALL ] arm-apollo-linux-gnueabi-gcc -Wall -g -O2 -iquote /home/Administrator/ ct-ng-1.9.3/crosstool-ng/crosstool-ng-1.9.3_build/targets/arm-apollo-linux-gnueabi/build/ build-ltrace -iquote /home/Administrator/ct-ng-1.9.3/crosstool-ng/crosstool-ng-1.9.3_build/ targets/arm-apollo-linux-gnueabi/build/build-ltrace/sysdeps/CYGWIN_NT-5.1 -DSYSCONFDIR="/usr/etc" -c -o main.o main.c [ALL ] /usr/bin/make -C sysdeps/CYGWIN_NT-5.1 [ALL ] make: Entering an unknown directory [ALL ] make: *** sysdeps/CYGWIN_NT-5.1: No such file or directory. Stop. [ALL ] make: Leaving an unknown directory [ERROR] make[1]: *** [sysdeps/sysdep.o] Error 2 [ALL ] make[1]: Leaving directory `/home/Administrator/ct-ng-1.9.3/crosstool-ng/ crosstool-ng-1.9.3_build/targets/arm-apollo-linux-gnueabi/build/build-ltrace' [ERROR] Build failed in step 'Installing ltrace' [ERROR] Error happened in '/opt/crosstool-ng-1.9.3/lib/ct-ng-1.9.3/scripts/functions' in function 'CT_DoExecLog' (line unknown, sorry) [ERROR] called from '/opt/crosstool-ng-1.9.3/lib/ct-ng-1.9.3/scripts/build/debug/ 400-ltrace.sh' at line # 52 in function 'do_debug_ltrace_build' [展开阅读全文
咨信网温馨提示:1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。




Cygwin下用crosstool-ng编译交叉工具链.doc



实名认证













自信AI助手
















微信客服
客服QQ
发送邮件
意见反馈



链接地址:https://www.zixin.com.cn/doc/6986032.html