2016-01-17 5 views
6

आप निम्नलिखित जाओ कार्यक्रम संकलन करने का प्रयास करें:क्रिप्टो/टीएलएस का उपयोग करने वाली गो बाइनरी को स्थिर रूप से कैसे लिंक करें?

package main 

import _ "crypto/tls" 

func main() { 

} 

आप एक गतिशील रूप से जुड़े हुए जाओ बाइनरी के साथ हवा जाएगा। यह मेरे लिए परेशान है (मैं एक डॉकर कंटेनर के अंदर एक गो बाइनरी बना रहा हूं, जो मेरे मेजबान से अलग libc का उपयोग करता है, जिसके परिणामस्वरूप बाइनरी मेरे होस्ट पर नहीं चलती)।

कैसे एक बल इस तरह के एक कार्यक्रम को स्थिर रूप से बनाने के लिए जाएं?

उत्तर

8

एकमात्र ओएस जहां crypto/tls कार्गो का उपयोग करता है डार्विन है, जहां इसे रूट सीए प्राप्त करने के लिए FetchPEMRoots पर कॉल करने की आवश्यकता है।

आपका प्रोग्राम कागो का उपयोग कर रहा है क्योंकि crypto/tlsnet पैकेज आयात करता है, जो डिफ़ॉल्ट रूप से होस्ट रिज़ॉल्वर से लिंक करता है। आप "netgo" build टैग का उपयोग कर net पैकेज कार्गो के बिना पैकेज बना सकते हैं।

go build -tags netgo 

या यदि आप एक रिलीज जहां एसटीडी lib संकुल डिफ़ॉल्ट रूप से नहीं बनाया गया हो जाएगा पर हैं, तो आप उन्हें ट्रिगर कर सकते हैं एक नया installsuffix साथ संकलित की

go build -installsuffix netgo -tags netgo 

आप कर रहे हैं के बाद से आपके पर्यावरण में कार्गो का उपयोग करने की आवश्यकता या क्षमता नहीं होगी, आप पूरी तरह से कार्गो को अक्षम करने के लिए CGO_ENABLED=0 के साथ सब कुछ बनाना चाहते हैं।

संबंधित मुद्दे

 संबंधित मुद्दे