louis
louis

Reputation: 93

invalid flag #cgo LDFLAGS break build with go lang

I'm new to the go-lang. I want to use go command to build a binary named cryptogen (hyperledger/fabric tool). I download the source code from github and type the following command 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

On my Mac OS (OS version is 10.13, go-lang version is 1.10) I'm getting the following error:

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

I thought I missing libtool, after installed it, I'm still getting the same error.

What can I do next?

Upvotes: 3

Views: 1801

Answers (3)

Gari Singh
Gari Singh

Reputation: 12033

Just as an FYI, PKCS11 is not really required to use cryptogen. You can actually use -tags "nopkcs11"

Upvotes: 2

Michael Hinkel
Michael Hinkel

Reputation: 11

This behavior has been fixed in GO version 1.10 (the release candidates still had this issue). Yesterday, I've got everything compiled after migrating to GO v1.10 (Ubuntu).

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

Upvotes: 1

sberry
sberry

Reputation: 132018

This is apparently a recent problem (Github PR) made in Go 1.9.4 and 1.10 to fix a security (associated Go commit)

The fix was made 22 days ago, but the library you are using github.com/hyperledger/fabric uses a vendored version of the pkcs11 library.

Personally I would see if installing github.com/miekg/pkcs11 HEAD, and removing the vendor directory solves the issue. If it works, create an issue for the fabric author to update the vendoered version or remove it altogether. There is a possibility (depending on the age of the vendored version) that there was already a breaking change made.

Read through the initial issue as well. It appears you can use

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

as well.

Upvotes: 1

Related Questions