无效标志#cgo LDFLAGS使用go lang打破构建

时间:2018-03-02 04:16:10

标签: go hyperledger-fabric cgo ldflags

我是go-lang的新手。我想使用go命令来构建名为cryptogen的二进制文件(hyperledger / fabric工具)。我从github下载源代码并输入以下命令accroding to readme:

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上(操作系统版本为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,安装后,我仍然遇到同样的错误。

接下来我该怎么办?

3 个答案:

答案 0 :(得分:2)

正如一个FYI,PKCS11并不是真正需要使用cryptogen。 您实际上可以使用-tags "nopkcs11"

答案 1 :(得分:1)

这显然是Go 1.9.4和1.10中修复安全性(Github PR

的最新问题(associated Go commit

修复程序是在22天前完成的,但您使用的库github.com/hyperledger/fabric使用了pkcs11库的托管版本。

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

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

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

答案 2 :(得分:1)

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

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