2014-06-10 5 views
5

मेरे पास एक .so फ़ाइल है जिसका कार्य मैं अपने गो कोड में कॉल करना चाहता हूं।मैं लिनक्स साझा लाइब्रेरी फ़ंक्शंस को गो में कैसे कॉल कर सकता हूं?

कैसे मुझे लगता है कि करने के बारे में जाते हैं? मैंने कार्गो और सिस्कल पैकेज पढ़ा है। वे जो चाहते हैं उसके करीब हैं लेकिन मुझे कोई भी जगह नहीं दिखाई दे रही है जहां मैं .so फ़ाइल में फ़ंक्शंस को कॉल कर सकता हूं।

मैं प्राप्त करने के लिए वास्तव में क्या ctypes संकुल पायथन में करता है चाहता हूँ।

किसी मदद कर सकते हैं?

+0

संभावित डुप्लिकेट [क्या मैं गो (Google) प्रोग्रामिंग भाषा के साथ साझा वस्तुओं का उपयोग कर सकता हूं?] (Http://stackoverflow.com/questions/2254777/can-i-use-shared-objects-with-go-google- प्रोग्रामिंग-भाषा) – OneOfOne

उत्तर

4

आप एक साझा पुस्तकालय है कि संकलन समय पर स्थिर में जाना जाता है का उपयोग करना चाहते, तो आप बस cgo उपयोग कर सकते हैं। दस्तावेज को बिल्कुल सही तरीके से कैसे करें, लेकिन आमतौर पर आप कुछ लिंकर झंडे और कुछ पंक्तियों को टिप्पणी करते हैं। libfoo.so से फ़ंक्शन bar() पर कॉल करने का उदाहरण यहां दिया गया है।

package example 

// #cgo LDFLAGS: -lfoo 
// 
// #include <foo.h> 
import "C" 

func main() { 
    C.bar() 
} 

आप रनटाइम पर गतिशील रूप से लोड की जा रही साझा वस्तुओं तक पहुंचने के लिए कागो का भी उपयोग कर सकते हैं। आप dlopen(), dlsym(), और dlclose() का उपयोग करें, किसी साझा लाइब्रेरी खोलने के अंदर कार्यों में से एक के पते को पुनः प्राप्त और अंत में पुस्तकालय बंद करने के लिए कर सकते हैं। ध्यान दें कि आप इन चीजों को गो में नहीं कर सकते हैं, आपको सी में कुछ रैपर कोड लिखना है जो आपके लिए निरंतर तर्क लागू करता है।

+0

मुझे लगता है कि मुझे टिप्पणी अनुभाग में हेडर फ़ंक्शन निर्दिष्ट करना होगा और फिर उन्हें कॉल करना होगा। मुझे देखने दो मैं क्या कर सकता हूँ। –

+0

@AgnivaDeSarker मैंने आपके प्रश्न को थोड़ा सा गलत समझा होगा। मुझे अपना जवाब दोबारा दोहराएं। – fuz

+0

हां, यही वही था जो मैं चाहता था! मैं बस एलडीएफएलजीएस भाग खो रहा था। –

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

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