【问题标题】:invalid flag #cgo LDFLAGS break build with go lang无效标志 #cgo LDFLAGS 使用 go lang 中断构建
【发布时间】:2018-08-10 06:58:51
【问题描述】:

我是 go-lang 的新手。我想使用 go 命令构建一个名为 cryptogen 的二进制文件(hyperledger/fabric 工具)。我从 github 下载源代码并根据自述文件键入以下命令:

CGO_CFLAGS=" " GOBIN=/hyperledger/src/github.com/hyperledger/fabric/build/bin go install -tags "" -ldflags "-X github.com/hyperledger/fabric/common/tools/cryptogen/metadata.Version=1.0.7" github.com/hyperledger/fabric/common/tools/cryptogen

在我的 Mac OS(OS 版本是 10.13,go-lang 版本是 1.10)上,我收到以下错误:

go build github.com/hyperledger/fabric/vendor/github.com/miekg/pkcs11: invalid flag in #cgo LDFLAGS: -I/usr/local/share/libtool

我以为我错过了libtool,安装它后,我仍然收到同样的错误。

接下来我能做什么?

【问题讨论】:

  • 尝试拉取最新的fabric版本。

标签: go hyperledger-fabric cgo ldflags


【解决方案1】:

这显然是 Go 1.9.4 和 1.10 中最近出现的一个问题 (Github PR),用于修复安全性 (associated Go commit)

修复是在 22 天前完成的,但您使用的库 github.com/hyperledger/fabric 使用的是 pkcs11 库的供应商版本。

我个人会看看安装 github.com/miekg/pkcs11 HEAD 并删除供应商目录是否可以解决问题。如果可行,请为结构作者创建一个问题以更新供应商版本或将其完全删除。有可能(取决于销售版本的年龄)已经进行了重大更改。

同时阅读initial issue。看来你可以使用

CGO_LDFLAGS_ALLOW='-Wl,--no-as-needed' go install

也是。

【讨论】:

  • 我从 github.com/miekg/pkcs11 HEAD 中删除了 '/usr/local/share/libtool' 然后构建成功。
【解决方案2】:

此行为已在 GO 版本 1.10 中得到修复(候选版本仍然存在此问题)。昨天,我在迁移到 GO v1.10 (Ubuntu) 后编译了所有内容。

另见:https://go-review.googlesource.com/c/go/+/93836/7/src/cmd/go/internal/work/security.go

【讨论】:

  • 安装 1.10 版后,我收到以下错误:ltdl.h: No such file or directory compilation terminated.。要解决此问题,请运行以下命令:sudo apt-get install libtool
【解决方案3】:

仅供参考,PKCS11 并不是真正需要使用 cryptogen。 你其实可以用-tags "nopkcs11"

【讨论】:

  • 完美修复!谢谢
猜你喜欢
  • 1970-01-01
  • 2021-11-12
  • 2020-11-12
  • 2018-12-28
  • 2022-08-22
  • 1970-01-01
  • 1970-01-01
  • 2015-03-12
  • 2020-10-19
相关资源
最近更新 更多