如何构建交叉编译工具链

2019-07-06 17:18:17 +08:00
 May725

我想从源码构建 gcc 交叉编译工具链。
三个参数类似如下:
build = linux
host = windows
target = arm-linux

google 一番,编译交叉工具链的博客挺多,但都是 build 和 host 相同情况的资料。
但是 build 和 host 不同时,并不知道如何处理。
希望熟悉这方面的 v2er 提供一些资料参考,不吝赐教。

5623 次点击
所在节点    Linux
10 条回复
stern123
2019-07-06 19:40:33 +08:00
1,build=linux,host=windows 比较难办,可以考虑 build 也换到 windows 下。具体的可以用 cygwin,但存在文件系统大小写的问题,很有可能编不过。
2,wsl 的方案问题同上,要搭建完整 linux 开发环境的话会编不过。
3,如果 build 和 host 都是 linux 的话,可以用 buildroot,丝滑体验。
4,如果你是打算做 linux 开发,建议 host 也换到 linux 去,省很多麻烦。
5,如果一般用用的话,可以考虑 llvm,可以 cmake 用 msvc 的,build 和 host 都是 windows,产生的编译器也是 native 的,体验会好于 cygwin+gcc。
wssy
2019-07-06 19:48:51 +08:00
你想在 linux 上编译一个可以运行在 win 上的编译器?使用类似 wine 的环境或许可行。
May725
2019-07-07 01:02:17 +08:00
@stern123
@wssy
突然想到 android ndk 的 windows 版本是如何编译出来的?
stern123
2019-07-07 08:02:53 +08:00
@May725 #3
基于 cygwin/mingw 或类似解决方案。如果软件源码中没有文件名大小写的问题,或者没有特别依赖系统服务(如 systemd )的,一般还是能编过的。但如果包含文件名大小写(就是同名文件、仅大小写不同),不论是源码还是中间生成文件,就不能顺利编过(比如遍 glibc 就会遇到这个问题)
或者 llvm 用 cmake 配 msvc。
Panic
2019-07-08 09:27:35 +08:00
linaro toolchain, 这是你要找的吗, 我记得用这个编过 cross compiler
Panic
2019-07-08 09:29:41 +08:00
看来我理解错了, 上面估计就是 build=host=linux 情形
Chowe
2019-07-08 09:37:59 +08:00
为什么要在 Windows 上搞交叉编译呢
May725
2019-07-08 09:43:22 +08:00
@Chowe 这个主要是面向客户
May725
2019-07-11 11:29:37 +08:00
@stern123 @wssy @Panic

找到了一个好的解决方案。

使用 crosstool-ng 构建交叉编译工具链

https://crosstool-ng.github.io/
这里阐述了交叉编译的各种情景,且明确说明了能够处理 build !=host !=target 的情况
http://crosstool-ng.org/git/crosstool-ng/plain/docs/6%20-%20Toolchain%20types.txt

步骤

1. 安装
2. 创建一个 work-dir
3. cd work-dir
4. ct-ng list-samples //查看有哪些默认配置模板
5. ct-ng arm-unknown-gnueabi //根据刚才的列表,选择一个合适的模板
6. ct-ng menuconfig //在模板基础上进一步细分配置
7. ct-ng build //开始构建、会持续相当长的时间
8. 构建结束后,当拷贝到 Windwos 系统时,会丢失符号链接, 我的做法是手动拷贝文件替代符号链接。

还有一点就是该项目默认是自动到各个官网下载相关源码的
如果想提供自己的源码,我的做法是:menuconfig 配置为禁止下载,然后手动将源码打包放到指定目录,以此绕过下载步骤。

更多细节可以参考官方文档。

这个项目太棒了!
stern123
2019-07-12 21:32:21 +08:00
666 这个工具还是不错的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/580606

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX