go install无法生成二进制文件

时间:2017-05-07 01:02:49

标签: 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="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_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 container + go install。如果我一次性使用Makefile构建它,它就可以正常工作。

使用此'docker run <image> go install <args>'样式命令时是否有任何问题/警告?

0 个答案:

没有答案