我搞了个小项目,用的是 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'

```

我觉得我已经脑掺了🙈🙈🙈
举报· 65 次点击
登录 注册 站外分享
5 条回复  
ysc3839 小成 2024-9-16 22:24:08
不是写了 clang 吗?
要不然去 LLVM 官网下,要不然用 MSYS2 里面的 clang 。
0o0O0o0O0o 小成 2024-9-16 22:42:46
既然你用 goreleaser ,那就用它的容器

docker run --rm -v /source:/app -w /app goreleaser/goreleaser --ferbose release --snapshot --clean --skip=announce,publish,validate
xinge666 小成 2024-9-16 23:06:22
sqlite 不是有库吗为什么要用 c 版的
monkeyWie 小成 2024-9-17 00:05:05
下载 zig ,然后有个 zig 的交叉编译工具链好像可以
body007 初学 2024-9-17 08:44:44
这是以前弄得交叉编译 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
返回顶部