背景我将使用go-sqlite3交叉编译golang应用程序,这会将我推入“cgo交叉编译坑”。为了将其交叉编译为aarch64,我使用的命令如下,但错误:[root@ec5dc2a3bd37 data_collector]# make crosscompiletryCGO_ENABLED=1 GOOS=linux GOARCH=arm64 CC=aarch64-linux-gnu-gcc CXX=aarch64-linux-gnu-g++ AR=aarch64-linux-gnu-ar CGO_LDFLAGS="--sysroot=/usr/include:/usr/lib/gcc/aarch64-linux-gnu/4.8.5/include -static" /usr/local/go/bin/go build -o ./output/crosscompile/dcagent ./cmd/agent/main.go# runtime/cgo_cgo_export.c:3:20: fatal error: stdlib.h: No such file or directory #include <stdlib.h> ^compilation terminated.make: *** [crosscompiletry] Error 2问题如何修复此错误?这是否意味着 gccgo 找不到 aarch64 的包含?我有这些包含和开发工具,包含由设置,我做得对吗?--sysroot我会在等待帮助时挖掘以下线索:我发现了我没有做的这个步骤,这与我的问题有关吗?搜索互联网后仍然没有找到解决方案,大多数类似的情况就是这个博客,但是如何在centos中安装musl-dev呢?找到一个xcgo的仓库,以后再试。
2 回答
狐的传说
TA贡献1804条经验 获得超3个赞
我使用xcgo解决了我的问题。我的编译命令是:
apt install gcc-8-aarch64-linux-gnu CGO_ENABLED=1 GOOS=linux GOARCH=arm64 CC=aarch64-linux-gnu-gcc-8 CGO_LDFLAGS="-static" $(GO) build
回到这个问题,我认为在 centos 中交叉编译工具安装存在一些微妙的错误,这导致超出报告的错误。如果有人看到这个,它建议用xcgo交叉编译你的应用程序,它支持go 1.15。即使你想用你的双手构建你的交叉编译泊坞窗,基于ubuntu将是一个好主意。
因为'go build'是一个高级编译命令,我不知道如何将'-debug-gcc'传递给'go tool cgo',以便打印更多的调试信息。找到一种方法来打印更多的调试信息应该是深入研究的好选择,我稍后会这样做。
谢谢。
- 2 回答
- 0 关注
- 982 浏览
添加回答
举报
0/150
提交
取消