无效标志#cgo LDFLAGS使用go lang中断生成

无效标志#cgo LDFLAGS使用go lang中断生成,go,hyperledger-fabric,cgo,ldflags,Go,Hyperledger Fabric,Cgo,Ldflags,我是go-lang的新手。我想使用go命令构建一个名为cryptogen(hyperledger/fabric tool)的二进制文件。我从github下载源代码,并根据自述键入以下命令: CGO_CFLAGS=" " GOBIN=/hyperledger/src/github.com/hyperledger/fabric/build/bin go install -tags "" -ldflags "-X github.com/hyperledger/fabric/common/tools/c

我是go-lang的新手。我想使用go命令构建一个名为
cryptogen
(hyperledger/fabric tool)的二进制文件。我从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,在安装它之后,我仍然会遇到同样的错误


下一步该怎么办?

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

修复是在22天前完成的,但您使用的库使用的是pkcs11库的供应商版本

我个人认为,安装github.com/miekg/pkcs11 HEAD并删除供应商目录是否可以解决问题。如果有效,请为fabric作者创建一个问题,以更新供应商版本或将其全部删除。有一种可能性(取决于所售版本的年代)是已经做出了突破性的更改

也要通读这本书。看来你可以用

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

同样。

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

仅供参考,PKCS11并非真正需要使用cryptogen。
实际上,您可以使用标签“nopkcs11”

从github.com/miekg/pkcs11 HEAD中删除“/usr/local/share/libtool”,然后成功构建。完美修复!感谢安装1.10版后,我收到了以下错误:
ltdl.h:没有终止此类文件或目录编译。
。要修复此问题,请运行以下命令:
sudo apt get install libtool
尝试获取最新的结构版本。