我想从源码构建 gcc 交叉编译工具链。
三个参数类似如下:
build = linux
host = windows
target = arm-linux
google 一番,编译交叉工具链的博客挺多,但都是 build 和 host 相同情况的资料。
但是 build 和 host 不同时,并不知道如何处理。
希望熟悉这方面的 v2er 提供一些资料参考,不吝赐教。
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。
你想在 linux 上编译一个可以运行在 win 上的编译器?使用类似 wine 的环境或许可行。
突然想到 android ndk 的 windows 版本是如何编译出来的?
/>基于 cygwin/mingw 或类似解决方案。如果软件源码中没有文件名大小写的问题,或者没有特别依赖系统服务(如 systemd )的,一般还是能编过的。但如果包含文件名大小写(就是同名文件、仅大小写不同),不论是源码还是中间生成文件,就不能顺利编过(比如遍 glibc 就会遇到这个问题)
或者 llvm 用 cmake 配 msvc。
linaro toolchain, 这是你要找的吗, 我记得用这个编过 cross compiler
看来我理解错了, 上面估计就是 build=host=linux 情形
为什么要在 Windows 上搞交叉编译呢
这个主要是面向客户
找到了一个好的解决方案。
使用 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 配置为禁止下载,然后手动将源码打包放到指定目录,以此绕过下载步骤。
更多细节可以参考官方文档。
这个项目太棒了!
666 这个工具还是不错的