2011-01-10 9 views
11

मैं Windows में पता है कि तुम LoadLibrary की तरह कुछ करने के लिए और फिर GetProcAddress के साथ अपने समारोह सूचक स्थापित करेगा,लिनक्स या ओएसएक्स में गतिशील रूप से लाइब्रेरी लोड हो रहा है?

लेकिन यह कैसे कुछ इसी तरह लिनक्स या OSX में किया जा चाहते हैं? कारण यह है कि मैं अपने एक्स प्लेटफ़ॉर्म एप्लिकेशन के लिए सिस्टम में एक प्लग विकसित करना चाहता हूं।

धन्यवाद

उत्तर

10

आप dlopen का उपयोग कर सकते हैं और लिनक्स और मैक ओएस एक्स (this Mac man page दोनों पर दोस्तों दोनों के लिए काम करना चाहिए)। नोट, हालांकि, आपको सावधान रहने की आवश्यकता है कि 32-बिट और 64-बिट कोड और पुस्तकालयों को मिश्रण न करें; मैक पर, बस सुनिश्चित करें कि पुस्तकालय "सार्वभौमिक बाइनरी" हैं।

+0

क्या आप लिनक्स और मैक दोनों पर "सार्वभौमिक बाइनरी" लागू करने के बारे में टिप्पणी करते हैं? स्पष्टीकरण के लायक हो सकता है। –

+0

जहां तक ​​मुझे पता है, लिनक्स के लिए आमतौर पर उपलब्ध वसा बाइनरी योजना नहीं है - फिर भी ("सार्वभौमिक बाइनरी" एक वसा बाइनरी के लिए ऐप्पल पार्लान्स है)। Http://en.wikipedia.org/wiki/Fat_binary#FatELF:_Universal_Binaries_for_Linux – EmeryBerger

+0

@ डेविड - Ulrich Drepper (आश्चर्य!) से यह बर्खास्तगी पत्र यह बेहद असंभव बनाता है कि लिनक्स वसा बाइनरी का समर्थन करेगा जब तक कि नरक फ्रीज नहीं हो जाता ... http : //www.redhat.com/archives/fedora-devel-list/2009-October/msg01118.html – EmeryBerger

5

लिनक्स में आप dlopen() का उपयोग (खुला पुस्तकालय), dlsym() (= समारोह या मूल्य प्रतीक को देखने के (है, आमतौर पर)) और दोस्तों: http://linux.die.net/man/3/dlopen

मैं यह काम करता है सुना है ओएस एक्स पर वैसे ही, लेकिन मुझे इसका कोई अनुभव नहीं है।

19

आप dlopen (LoadLibrary के अनुरूप), dlclose (अनुरूप FreeLibrary के लिए) और dlsym (GetProcAddress के अनुरूप) के लिए देख रहे हैं।

2

POSIX समकक्ष dlopen और dlsym हैं। मुझे पता है कि लिनक्स में उन्हें है, और अगर मैं ओएस एक्स नहीं करता तो मुझे आश्चर्य होगा।

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