2015-11-09 2 views
0

Я пытаюсь скомпилировать программу небольшого хода статически (для игры с Rocket). Я работаю на Debian Jessie (версия Mint). Я установил пакет golang-go. Документация Ракетно дает примеры того, как собрать статически для версии 1.4 идут и 1.5Как скомпилировать статически связанную программу go (1.3)?

1.4 
$ CGO_ENABLED=0 GOOS=linux go build -o hello -a -installsuffix cgo . 

1.5: 
$ CGO_ENABLED=0 GOOS=linux go build -o hello -a -tags netgo -ldflags '-w' . 

К сожалению, go version говорит, что я бегу 1.3.

$ go version 
go version go1.3.3 linux/amd64 

Я пробовал версию 1.4, надеясь, что это будет для 1,3, но такой удачи нет. Я не уверен, что я установил все пакеты debian, которые мне даже нужны?

I был способен скомпилировать файл и запустить его, используя только go build howdy.go. Небольшое приложение работает, как ожидалось, но ldd показывает, что он имеет несколько динамических зависимостей:

$ ldd howdy 
    linux-vdso.so.1 (0x00007ffe72d7e000) 
    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f3b22e5a000) 
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f3b22ab1000) 
    /lib64/ld-linux-x86-64.so.2 (0x00007f3b23077000) 

Для полного раскрытия, небольшая программа, которую я пытаюсь собрать статически (howdy.go) является:

package main 

import (
    "log" 
    "net/http" 
) 

func main() { 
    http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { 
     log.Printf("request from %v\n", r.RemoteAddr) 
     w.Write([]byte("howdy\n")) 
    }) 
    log.Fatal(http.ListenAndServe(":5000", nil)) 
} 

Дополнительно , выход идет -й:

$ go build -x howdy.go 
WORK=/tmp/go-build496765737 
mkdir -p $WORK/command-line-arguments/_obj/ 
cd /home/travisg/rkt-v0.10.0 
/usr/lib/go/pkg/tool/linux_amd64/6g -o $WORK/command-line-arguments.a -trimpath $WORK -p command-line-arguments -complete -D _/home/travisg/rkt-v0.10.0 -I $WORK -pack ./howdy.go 
cd . 
/usr/lib/go/pkg/tool/linux_amd64/6l -o howdy -L $WORK -extld=gcc $WORK/command-line-arguments.a 

и выход идти окр является:

GOARCH="amd64" 
GOBIN="" 
GOCHAR="6" 
GOEXE="" 
GOHOSTARCH="amd64" 
GOHOSTOS="linux" 
GOOS="linux" 
GOPATH="" 
GORACE="" 
GOROOT="/usr/lib/go" 
GOTOOLDIR="/usr/lib/go/pkg/tool/linux_amd64" 
CC="gcc" 
GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0" 
CXX="g++" 
CGO_ENABLED="1" 
+0

Вы всегда можете использовать диспетчер Go Version https://github.com/moovweb/gvm установить Пойдите 1.4 или 1.5 и используйте это, возможно. –

+0

Метод от go1.4 работал для меня на 1.3. Можете ли вы поместить вывод 'go env'? Кроме того, вы можете проверить, как вещи строятся с помощью опции -x. (однако, я бы действительно рекомендовал внедрить текущую версию Go) – JimB

+0

Добавлено. Я действительно просто пытался исследовать «Ракету», надеялся не учиться «Го» во многом, как боковое касание. Полагаю, что ребята из «Ракетки» не были такими кровоточащими. –

ответ