如何构建交叉编译工具链 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
May725
V2EX    Linux

如何构建交叉编译工具链

  •  
  •   May725 2019-07-06 17:18:17 +08:00 6131 次点击
    这是一个创建于 2296 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    第 1 条附言    2019-07-11 11:33:35 +08:00

    找到了满意的解决方案 crosstool-ng , 9楼有说明。

    10 条回复    2019-07-12 21:32:21 +08:00
    stern123
        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。
    wssy
        2
    wssy  
       2019-07-06 19:48:51 +08:00 via Android
    你想在 linux 上编译一个可以运行在 win 上的编译器?使用类似 wine 的环境或许可行。
    May725
        3
    May725  
    OP
       2019-07-07 01:02:17 +08:00
    @stern123
    @wssy
    突然想到 android ndk 的 windows 版本是如何编译出来的?
    stern123
        4
    stern123  
       2019-07-07 08:02:53 +08:00 via iPhone   1
    @May725 #3
    基于 cygwin/mingw 或类似解决方案。如果软件源码中没有文件名大小写的问题,或者没有特别依赖系统服务(如 systemd )的,一般还是能编过的。但如果包含文件名大小写(就是同名文件、仅大小写不同),不论是源码还是中间生成文件,就不能顺利编过(比如遍 glibc 就会遇到这个问题)
    或者 llvm 用 cmake 配 msvc。
    Panic
        5
    Panic  
       2019-07-08 09:27:35 +08:00
    linaro toolchain, 这是你要找的吗, 我记得用这个编过 cross compiler
    Panic
        6
    Panic  
       2019-07-08 09:29:41 +08:00
    看来我理解错了, 上面估计就是 build=host=linux 情形
    Chowe
        7
    Chowe  
       2019-07-08 09:37:59 +08:00
    为什么要在 Windows 上搞交叉编译呢
    May725
        8
    May725  
    OP
       2019-07-08 09:43:22 +08:00
    @Chowe 这个主要是面向客户
    May725
        9
    May725  
    OP
       2019-07-11 11:29:37 +08:00   1
    @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
        10
    stern123  
       2019-07-12 21:32:21 +08:00 via iPhone
    666 这个工具还是不错的
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     882 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    ERSION: 3.9.8.5 27ms UTC 20:28 PVG 04:28 LAX 13:28 JFK 16:28
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86