cgo 交叉编译错误 stdlib.h 未找到

背景

我将使用go-sqlite3交叉编译golang应用程序,这会将我推入“cgo交叉编译坑”。为了将其交叉编译为aarch64,我使用的命令如下,但错误:


[root@ec5dc2a3bd37 data_collector]# make crosscompiletry

CGO_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

我会在等待帮助时挖掘以下线索:

  1. 我发现了我没有做的这个步骤,这与我的问题有关吗?

  2. 搜索互联网后仍然没有找到解决方案,大多数类似的情况就是这个博客,但是如何在centos中安装musl-dev呢?

  3. 找到一个xcgo的仓库,以后再试。


莫回无
浏览 983回答 2
2回答

狐的传说

我使用xcgo解决了我的问题。我的编译命令是:apt&nbsp;install&nbsp;gcc-8-aarch64-linux-gnu CGO_ENABLED=1&nbsp;GOOS=linux&nbsp;GOARCH=arm64&nbsp;CC=aarch64-linux-gnu-gcc-8&nbsp;CGO_LDFLAGS="-static"&nbsp;$(GO)&nbsp;build回到这个问题,我认为在 centos 中交叉编译工具安装存在一些微妙的错误,这导致超出报告的错误。如果有人看到这个,它建议用xcgo交叉编译你的应用程序,它支持go 1.15。即使你想用你的双手构建你的交叉编译泊坞窗,基于ubuntu将是一个好主意。因为'go build'是一个高级编译命令,我不知道如何将'-debug-gcc'传递给'go tool cgo',以便打印更多的调试信息。找到一种方法来打印更多的调试信息应该是深入研究的好选择,我稍后会这样做。谢谢。

慕森卡

sudo&nbsp;apt&nbsp;install&nbsp;--reinstall&nbsp;build-essential为我解决了错误。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go