有没有办法使用 gccgo 构建 hyperledger fabric?我想这样做是为了使用 gcc 的 -finstrument-functions 选项来跟踪函数调用。但是我遇到了两个问题。我的步骤如下。
- 找到构建命令
make -n release
echo "Building release/linux-amd64/bin/configtxgen for linux-amd64"
mkdir -p release/linux-amd64/bin CGO_CFLAGS=" "
GOOS=linux GOARCH=amd64 go build -o /home/yiifburj/go/src/github.com/hyperledger/fabric/release/linux-amd64/bin/configtxgen -tags "nopkcs11" -ldflags "-X github.com/hyperledger/fabric/common/tools/configtxgen/metadata.Version=1.1.0" github.com/hyperledger/fabric/common/tools/configtxgen
- 修改构建命令以使用gccgo
CGO_CFLAGS=" " GOOS=linux GOARCH=amd64 go build -compiler gccgo -o /home/yiifburj/go/src/github.com/hyperledger/fabric/release/linux-amd64/bin/configtxgen -tags "nopkcs11" -gccgoflags "-X github.com/hyperledger/fabric/common/tools/configtxgen/metadata.Version=1.1.0" github.com/hyperledger/fabric/common/tools/configtxgen
#github.com/hyperledger/fabric/bccsp/factory
bccsp/factory/pluginfactory.go:12:8: error: import file ‘plugin’ not found
"plugin"bccsp/factory/pluginfactory.go:56:15: error: reference to undefined name
‘plugin’ plug, err := plugin.Open(config.PluginOpts.Library)
首先,如上,go build调用gccgo时找不到“plugin”。 另一个是在使用 gccgo 时如何传递 ldflags -X?看来 -X 是一个参数,只在 gc 工具中无效,在 gccgo 中无效。
谁能帮帮我?谢谢。
最佳答案
您需要使用正确版本的 GCC 才能获得对各种 Fabric 版本支持的 Go 版本的支持。
- Fabric 1.1 需要 Go 1.9.x
- Fabric 1.2.x 需要 Go 1.10.x
- 即将推出的 Fabric 1.3 也需要 Go 1.10
gccgo 不支持 Go 1.9(GCC 7 支持 Go 1.8)。 GCC 8 添加了对 Go 1.10 的支持。
所以你应该使用 Fabric v1.2 和 GCC 8。
关于go - 如何使用 gccgo 构建 hyperledger fabric,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52125955/