A-A+
crosstool-ng构建的一个错误的解决
这段时间,既在做一个基于已有芯片平台的项目,也要进行新芯片平台的预研。在新平台学习中,发现没有自带交叉编译器——无论是光盘自带还是从官网下载,都没有。倒是有一个文档讲述了如何自己构建交叉编译器。一直以来,我都没有自己搞过交叉编译器,这也让我学习了一下。
关于crosstool-ng,网上有很多资料,也有介绍编译过程的。有空再写一篇文章吧。这里只讲一下我在构建过程遇到的一个小错误。
在最后一个编译crosstool-ng时,出现下面的错误:
[INFO ] Extracting and patching toolchain components [EXTRA] Extracting 'mpc-0.8.1' [ERROR] [ERROR] >> [ERROR] >> Build failed in step 'Extracting and patching toolchain components' [ERROR] >> called in step '(top-level)' [ERROR] >> [ERROR] >> Error happened in: CT_DoExecLog[scripts/functions@257] [ERROR] >> called from: CT_Extract[scripts/functions@953] [ERROR] >> called from: do_mpc_extract[scripts/build/companion_libs/140-mpc.sh@21] [ERROR] >> called from: do_companion_libs_extract[scripts/build/companion_libs.sh@22] [ERROR] >> called from: main[scripts/crosstool-NG.sh@606] [ERROR] >> [ERROR] >> For more info on this error, look at the file: 'build.log' [ERROR] >> There is a list of known issues, some with workarounds, in: [ERROR] >> '/home/latelee/crosstool/depends/install/ct-ng_install/crosstool-ng-hg-install/share/doc/crosstool-ng/ct-ng.hg+default-069f43a215cc/B - Known issues.txt' [ERROR] [ERROR] (elapsed: 0:02.63) [00:02] / make[1]: *** [build] Error 2 make: *** [build.8] Error 2
其实从上面的信息看不出是什么错误导致的,但人家也说了去看build.log文件,找到这个文件,里面有真正的错误信息:
[EXTRA] Extracting 'mpc-0.8.1' [DEBUG] ==> Executing: 'mkdir' '-p' 'mpc-0.8.1' [DEBUG] ==> Executing: 'tar' '--strip-components=1' '-C' 'mpc-0.8.1' '-xv' '-f' '-' [FILE ] tar: Archive is compressed. Use -z option [FILE ] tar: Error is not recoverable: exiting now
看到是解压一个压缩包出错了。这个包名是mpc-0.8.1.tar.xz,上面提到的命令无法正确解压,试了几次也不行,后来自己想出一种方法。
把这个包自行解压到src目录中。然后再在src目录的.mpc-0.8.1.extracting文件改名为.mpc-0.8.1.extracted,再编译一次,搞定了。
与src同级有tarball目录,前者是存放已经解压好的库、工具,后者存放的是下载的压缩包。
这个方法是欺骗了crosstool-ng,让它以为已经压缩好了。实际上,从出错后的.mpc-0.8.1.extracting文件可以看出,正是在解压过程中出现,一旦解压了,就变成.mpc-0.8.1.extracted文件了。
李迟记于2014年8月24日