我在 linux-amd64 上构建了一个 darwin-amd64 版本的程序,交叉编译命令是:GOOS=darwin GOARCH=amd64 GOBIN=/tmp go install <myprogram>在此之前,我已经使用以下方法准备了 darwin-amd64 工具链:sudo GOOS=darwin GOARCH=amd64 ./make.bash但是,把这个 darwin-amd64 版本的二进制文件给我的同事后,他们不能用它来登录,因为登录会发送一个 HTTPS 请求,它将使用 CGO。返回的 Errmsg 是:x509: failed to load system roots and no roots provided对于如何解决这个问题,有任何的建议吗?
1 回答
慕哥9229398
TA贡献1877条经验 获得超6个赞
这看起来像一个证书的问题,如“中提到的一个大厦泊坞窗图像静态转到二进制”
这样做的原因是在 Linux 系统上,tls 包从 中读取根 CA 证书
/etc/ssl/certs/ca-certificates.crt
,而临时映像中缺少该证书。
Contributors 应用程序通过捆绑根 CA 证书的副本并配置出站调用以使用它们来解决此问题。
所以你可以检查/etc/ssl/certs/ca-certificates.crt
你同事的工作站上是否有。
但是这个错误报告表明:
刚刚从 go-nuts得到了一些澄清。这是因为交叉编译不适用于加载 x509 证书...
交叉编译器在编译期间不能使用“cgo”,但需要“cgo”才能访问 Darwin 上的根证书存储。
我有一个类似的问题,
crt
从这些 linux 发行版中的任何一个复制文件后解决了。要让 golang 读取文件,您必须将文件放在完全相同的目录中。crypto/x509
将遍历所有可能的证书文件。
另一种解决方案涉及使用“ export CGO_ENABLED=0
”进行交叉编译。
该漏洞8349只显示了一些更近期的围棋进步了。
- 1 回答
- 0 关注
- 298 浏览
添加回答
举报
0/150
提交
取消