2016-01-17 16 views
6

aşağıdaki Git programı derlemeye denerseniz:Kripto/tls kullanan bir Go ikili dosyasını statik olarak nasıl bağlanır?

package main 

import _ "crypto/tls" 

func main() { 

} 

Bir dinamik bağlantılı Git ikili ile dolayacaksın. Bu benim için can sıkıcı bir durum (ev sahibimden farklı bir libc kullanan bir Docker kapsayıcısında bir Go ikili oluşturuyorum, bu da ana bilgisayarımda çalışmamaya neden olur).

İnsan nasıl kuvvet Git statik böyle bir program oluşturmak için geliyor?

cevap

8

crypto/tls'un cgo kullandığı tek işletim sistemi, temel CA'ları almak için FetchPEMRoots numaralı telefonu aramasının gerektiği darwin'dir.

Programınızın cgo kullanıyor olmasının nedeni, crypto/tls, ana bilgisayar çözümleyicisine varsayılan olarak bağlanan net paketini içe aktarmasıdır. "Netgo" derleme etiketini kullanarak c123 olmadan net paketini oluşturabilirsiniz.

go build -tags netgo 

Yoksa std lib paketleri varsayılan olarak inşa edilecek olmayacak bir sürüm üzerinde iseniz, bunları tetikleyebilir yeni installsuffix ile derlemek için

go build -installsuffix netgo -tags netgo 

sen yana cgo'nuzu ortamınızda kullanma veya kullanma gereksinimine sahip olmayacaksınız, sadece cgo'yu tamamen devre dışı bırakmak için CGO_ENABLED=0 ile her şeyi inşa etmek isteyebilirsiniz.