Gcc go install无法生成二进制文件

Gcc go install无法生成二进制文件,gcc,docker,go,gccgo,docker-engine,Gcc,Docker,Go,Gccgo,Docker Engine,这个问题有两个方面: 1) Go install无法生成二进制文件 go version go1.7.3 linux/amd64 go env: GOARCH="amd64" GOBIN="" GOEXE="" GOHOSTARCH="amd64" GOHOSTOS="linux" GOOS="linux" GOPATH="/opt/gopath" GORACE="" GOROOT="/opt/go" GOTOOLDIR="/opt/go/pkg/tool/linux_amd64" CC="g

这个问题有两个方面:

1) Go install无法生成二进制文件

go version go1.7.3 linux/amd64

go env:
GOARCH="amd64" GOBIN="" GOEXE="" GOHOSTARCH="amd64" GOHOSTOS="linux" GOOS="linux" GOPATH="/opt/gopath" GORACE="" GOROOT="/opt/go" GOTOOLDIR="/opt/go/pkg/tool/linux_amd64" CC="gcc" GOGCCFLAGS="-fPIC
-m64 -pthread -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build831334660=/tmp/go-build -gno-record-gcc-switches" CXX="g++" CGO_ENABLED="1"
程序的来源:
https://github.com/hyperledger/fabric

工作目录:
/opt/gopath/src/github.com/hyperledger/fabric

要构建的主程序:
/opt/gopath/src/github.com/hyperledger/fabric/peer/Main.go

生成命令:

CGO_ENABLED=0 GOBIN=/opt/gopath/bin go install -x -ldflags " -X github.com/hyperledger/fabric/common/metadata.Version=1.0.0-snapshot-d6fbfcf -X github.com/hyperledger/fabric/common/metadata.BaseVersion=0.3.0 -X github.com/hyperledger/fabric/common/metadata.BaseDockerLabel=org.hyperledger.fabric -X github.com/hyperledger/fabric/common/metadata.DockerNamespace=hyperledger -X github.com/hyperledger/fabric/common/metadata.BaseDockerNamespace=hyperledger -linkmode external -extldflags -static -lpthread" github.com/hyperledger/fabric/peer
我希望是内置的二进制文件
/opt/gopath/bin
,但里面什么都没有

它在控制台上显示生成了一系列.a文件并将其移动到
/opt/gopath/pkg/linux\u amd64/
最终程序停止了,没有生成二进制文件。 无论CGO_ENABLED设置为0或1,这都是正确的

不知怎的,程序认为它完成了,没有链接目标文件和构建二进制文件?我可以使用其他调试方法来进一步研究它吗

2) “Go install”命令取自Makefile

@$(DRUN) \
-v $(abspath build/docker/bin):/opt/gopath/bin \
-v $(abspath build/docker/$(TARGET)/pkg):/opt/gopath/pkg \
hyperledger/fabric-baseimage:$(BASE_DOCKER_TAG) \
go install -compiler gccgo -ldflags "$(DOCKER_GO_LDFLAGS)" $(pkgmap.$(@F))

where 
DRUN = docker run -i --rm $(DOCKER_RUN_FLAGS) \
-v $(abspath .):/opt/gopath/src/$(PKGNAME) \
-w /opt/gopath/src/$(PKGNAME)
'Go install'
命令在docker容器中运行,该容器的启动方式与Makefile指定的方式相同。唯一的区别是,我是手动完成的,分两次完成,即启动docker容器+go安装。如果我用Makefile一次性构建它,它会工作得很好


使用此
“docker run go install”
样式命令是否有任何问题/警告?

您是否尝试将GOBIN=“”配置为指向所需位置/opt/gopath/bin另请参见:
如果设置了GOBIN环境变量,则命令将安装到它命名的目录,而不是DIR/bin。GOBIN必须是绝对路径
不确定“命令安装到它命名的目录”是什么意思@mh cbon是的,我已尝试设置GOBIN,并确保GOBIN是绝对路径。看起来.a文件生成得不错,但最后我缺少了一个链接器调用。如果这是生成器环境问题,您可能需要尝试ML@go-坚果