2015-10-13 13 views
6

golang sürüm < 1.5 ile nasıl yaratılır 1.5 - statik bağlantı örnekleri, yayınları ve tarifleri bol miktarda vardır. Peki ya> 1.5? (google arama, arama terimlerim için yararlı bir sonuç döndürmedi.) Temel rkt (CoreOS) kapsayıcısında çalıştırılabilen, statik olarak bağlantılı bir ikili üretmek için herhangi bir öneri var mı?Statik olarak bağlanmış bir golang çalıştırılabilirliği 1.5 +

zaman git:

$go version 
go version go1.5 linux/amd64 

benim konteyner çalıştırmayı deneyin:

sudo rkt --insecure-skip-verify run /tmp/FastBonusReport.aci 

alıyorum:

[38049.477658] FastBonusReport[4]: Error: Unable to open "/lib64/ld-linux-x86-64.so.2": No such file or directory 

kapta yürütülebilir bu bağlı olduğunu düşündüren lib ve dolayısıyla statik değil.

go build ${myapp}.go 

Bu article birkaç örnek < 1.5 golang vardır:

cat <<EOF > /tmp/${myapp}/manifest 
{ 
    "acKind": "ImageManifest", 
    "acVersion": "0.9.0", 
    "name": "${lowermyapp}", 
    "labels": [ 
     {"name": "os", "value": "linux"}, 
     {"name": "arch", "value": "amd64"} 
    ], 
    "app": { 
     "exec": [ 
      "/bin/${myapp}" 
     ], 
     "user": "0", 
     "group": "0" 
    } 
} 
EOF 

ikili oluşturmak benim komut satırı gibi görünüyor: gibi

benim apaçık görünüyor. Ve sonra CoreOS sitesinde bu getting started makale var.

+0

sen bize gösterir misin? Süreç gerçekten değişmedi. – JimB

+0

ve makalelere bazı bağlantılar ekledik. – Richard

+4

'CGO_ENABLED = 0' ayarladınız mı? – JimB

cevap

8

Kendi sorumu cevaplamaktan nefret ediyorum. Yorumlar doğru yapılmış CGO_ENABLED=0 go build ./... hile yapmış gibi görünüyor. Özgün sorunun bir parçası olmasa da, program rkt kapsayıcısında yürütülmeye başladıktan sonra uygun bir DNS isteği gerçekleştirilemedi. Yani başka bir şey olmalı.

+0

Bu Mac OS X'te çalışıyor mu (darwin)? DNS aramalarının Go tarafından yapılmadığı tek platform olduğunu düşündüm. – Volker

+1

@Volker: dns aramaları, nsswitch.conf izinleri verildiğinde yapılır, ancak cgo resolver hala bağlanır, böylece gerektiğinde kullanılabilir (ayrıca bir "GODEBUG = netdns =", çalışma zamanında ileri geri geçiş için her ikisinin de mevcut olması gerekir) – JimB

+1

@Richard, kendi/etc/hosts'lerinizi konteynerinize eklemelisiniz, (burada) https: // github.etcd projesinde com/coreos/etcd/blob/master/scripts/build-aci # L64). –

5

Statik bağlama:

Git 1.5:

Ben kullanmak zorunda Go 1.6 ile
go build -ldflags "-extldflags -static" ... 

: Eğer app inşa ediyoruz nasıl

go build -ldflags "-linkmode external -extldflags -static" ...