无效的标志#cgo LDFLAGS 用 go lang 中断构建

invalid flag #cgo LDFLAGS break build with go lang

我是 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,安装后,我仍然遇到同样的错误。

接下来我能做什么?

这显然是最近出现的问题 (Github PR) made in Go 1.9.4 and 1.10 to fix a security (associated Go commit)

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

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

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

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

还有。

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

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

仅供参考,PKCS11 并不是使用 cryptogen 所必需的。 你实际上可以使用 -tags "nopkcs11"