为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
莫回无 2022-09-05 09:07:07
背景我将使用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',以便打印更多的调试信息。找到一种方法来打印更多的调试信息应该是深入研究的好选择,我稍后会这样做。

谢谢。


查看完整回答
反对 回复 2022-09-05
?
慕森卡

TA贡献1806条经验 获得超8个赞

sudo apt install --reinstall build-essential

为我解决了错误。


查看完整回答
反对 回复 2022-09-05
  • 2 回答
  • 0 关注
  • 982 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信