请教一下各位老哥,在 Windows go 程序交叉编译时候使用什么编译链? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
kuxiaobai
V2EX    Go 编程语言

请教一下各位老哥,在 Windows go 程序交叉编译时候使用什么编译链?

  •  
  •   kuxiaobai 2024-09-16 22:23:08 +08:00 2724 次点击
    这是一个创建于 395 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我搞了个小项目,用的是 goreleaser 来编译各环境应用,由于需要用到 sqlite 便在配置文件中把CGO_ENABLED 的值设置为 1 ,但是在编译过程中遇到各种各样的问题。

    build failed after 10s error=failed to build for darwin_arm64: exit status 1: # runtime/cgo cgo: C compiler "clang" not found: exec: "clang": executable file not found in %PATH% ----------- build failed after 11s error=failed to build for linux_arm_6: exit status 1: # runtime/cgo gcc: error: unrecognized command line option '-marm'; did you mean '-mabm'? ---------- failed to build for linux_amd64_v1: exit status 1: # runtime/cgo arm-linux-gnueabi-gcc: error: unrecognized command-line option '-m64' 

    我觉得我已经脑掺了

    15 条回复    2024-09-18 16:43:04 +08:00
    ysc3839
        1
    ysc3839  
       2024-09-16 22:24:08 +08:00 via Android
    不是写了 clang 吗?
    要不然去 LLVM 官网下,要不然用 MSYS2 里面的 clang 。
    kuxiaobai
        2
    kuxiaobai  
    OP
       2024-09-16 22:30:51 +08:00
    @ysc3839 我已经在此 https://releases.llvm.org/ 下载并安装了,也设置了环境变量,之后就这样:
    ```
    build failed after 11s error=failed to build for linux_arm_6: exit status 1: # runtime/cgo
    gcc: error: unrecognized command line option '-marm'; did you mean '-mabm'?
    ```
    kuxiaobai
        3
    kuxiaobai  
    OP
       2024-09-16 22:32:35 +08:00
    @ysc3839 感谢老哥回复,现在心乱了,找时间我在研究
    0o0O0o0O0o
        4
    0o0O0o0O0o  
       2024-09-16 22:42:46 +08:00 via iPhone
    既然你用 goreleaser ,那就用它的容器

    docker run --rm -v /source:/app -w /app goreleaser/goreleaser --verbose release --snapshot --clean --skip=announce,publish,validate
    TaurusXin
        5
    TaurusXin  
       2024-09-16 23:06:22 +08:00 via iPhone
    sqlite 不是有库吗为什么要用 c 版的
    ysc3839
        6
    ysc3839  
       2024-09-16 23:21:38 +08:00
    @kuxiaobai 抱歉,我看错了,你需要的是交叉编译的工具链,那可能只能自己从源代码编译 darwin clang 了。
    monkeyWie
        7
    monkeyWie  
       2024-09-17 00:05:05 +08:00
    下载 zig ,然后有个 zig 的交叉编译工具链好像可以
    body007
        8
    body007  
       2024-09-17 08:44:44 +08:00
    这是以前弄得交叉编译 docker 制作方法。

    https://github.com/jan-bar/xgo/blob/master/docker/readme.md

    这里有个在 Linux 的 docker 交叉编译 window 的 sqlite 脚本,不过当时没有研究交叉编译 arm 的方法。但我感觉就是安装 arm64-gcc 的编译工具,然后给 go 设置环境变量即可。

    https://github.com/jan-bar/xgo/blob/master/tests/sqlite/build.sh

    还有这个纯 go 的 sqlite 驱动可以试试看: https://gitlab.com/cznic/sqlite
    kuxiaobai
        9
    kuxiaobai  
    OP
       2024-09-17 10:45:36 +08:00
    @0o0O0o0O0o 感谢老哥,我也试过用 docker 但编译 arm 还是会遇到问题
    kuxiaobai
        10
    kuxiaobai  
    OP
       2024-09-17 10:50:14 +08:00
    @body007 感谢 老哥,amd 的没得问题,就是在 arm 编译上遇到了问题,sqlite 的驱动我用 https://github.com/glebarez/sqlite
    flyqie
        11
    flyqie  
       2024-09-17 15:55:47 +08:00 via Android   1
    说真的,这种需求建议上专门的 cicd 环境搞,cgo 的交叉编译真的不太好做,除了 android 这种以外,剩下都建议在目标系统上做。
    Kisesy
        12
    Kisesy  
       2024-09-17 18:54:58 +08:00
    sqlite3 库换成 https://github.com/ncruces/go-sqlite3, 不用 C
    jim9606
        13
    jim9606  
       2024-09-17 19:55:31 +08:00 via Android
    小项目别折腾了吧,找纯 go 实现的 sqlite 客户端库。
    intersect
        14
    intersect  
       2024-09-17 20:09:37 +08:00
    sqlite 使用 github.com/mattn/go-sqlite3 ,Window11+WSL 下编译起来还算方便

    编译参数参考:
    export CGO_ENABLED=1

    # AMD64
    #export GOOS=linux
    #export GOARCH=amd64

    export GOOS=linux
    # arm
    #export GOARCH=arm
    #export CC=arm-linux-gnueabihf-gcc

    # aarch64
    # apt-get install -y aarch64-linux-gnu-gcc
    export GOARCH=arm64
    export CC=aarch64-linux-gnu-gcc
    xsen
        15
    xsen  
       2024-09-18 16:43:04 +08:00
    sqlite 有 pure-go 版本的,
    https://github.com/glebarez/go-sqlite.git
    关于     帮助文档     自助推广系统     博客     API     a href="/faq" class="dark" target="_self">FAQ     Solana     5339 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 30ms UTC 01:15 PVG 09:15 LAX 18:15 JFK 21:15
    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