我想从源码构建 gcc 交叉编译工具链。
三个参数类似如下:
build = linux
host = windows
target = arm-linux
google 一番,编译交叉工具链的博客挺多,但都是 build 和 host 相同情况的资料。
但是 build 和 host 不同时,并不知道如何处理。
希望熟悉这方面的 v2er 提供一些资料参考,不吝赐教。
找到了满意的解决方案 crosstool-ng , 9楼有说明。
1
stern123 2019-07-06 19:40:33 +08:00 via iPad
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。 |
2
wssy 2019-07-06 19:48:51 +08:00 via Android
你想在 linux 上编译一个可以运行在 win 上的编译器?使用类似 wine 的环境或许可行。
|
4
stern123 2019-07-07 08:02:53 +08:00 via iPhone 1
@May725 #3
基于 cygwin/mingw 或类似解决方案。如果软件源码中没有文件名大小写的问题,或者没有特别依赖系统服务(如 systemd )的,一般还是能编过的。但如果包含文件名大小写(就是同名文件、仅大小写不同),不论是源码还是中间生成文件,就不能顺利编过(比如遍 glibc 就会遇到这个问题) 或者 llvm 用 cmake 配 msvc。 |
5
Panic 2019-07-08 09:27:35 +08:00
linaro toolchain, 这是你要找的吗, 我记得用这个编过 cross compiler
|
6
Panic 2019-07-08 09:29:41 +08:00
看来我理解错了, 上面估计就是 build=host=linux 情形
|
7
Chowe 2019-07-08 09:37:59 +08:00
为什么要在 Windows 上搞交叉编译呢
|
9
May725 OP @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 配置为禁止下载,然后手动将源码打包放到指定目录,以此绕过下载步骤。 更多细节可以参考官方文档。 这个项目太棒了! |
10
stern123 2019-07-12 21:32:21 +08:00 via iPhone
666 这个工具还是不错的
|