go install не удалось создать двоичный файл

Есть две проблемы этой проблемы:

1) Перейти установить не удалось сгенерировать двоичный

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 ответов

Другие вопросы по тегам