2011-10-01 18 views
5

मेरे पास कुछ पुस्तकालयों के साथ मेरे हाथ पर एक प्रोजेक्ट है जो लोड करने योग्य मॉड्यूल के रूप में संकलित हैं, यानी libtol के -module ध्वज से जुड़ा हुआ है। इन पुस्तकालयों में स्वयं या उनकी निर्भरताओं में सभी आवश्यक कार्यों को शामिल किया जाना चाहिए, यानी एक साधारण मुख्य() फ़ंक्शन से जुड़ा हुआ एक पूर्ण प्रोग्राम उत्पन्न करना चाहिए जो मेरे प्रोग्राम के लिए मॉड्यूल इंटरफ़ेस के सभी कार्यों को बस कॉल करता है।पोर्टेबल लोड करने योग्य मॉड्यूल के खिलाफ एक्जिक्यूटिव को कैसे लिंक कर रहा है?

चूंकि मुझे अपूर्ण और इस प्रकार अनुपयोगी मॉड्यूल के साथ समस्याएं थीं, मेरे पास कुछ सरल चेक प्रोग्राम हैं जिनमें केवल मुख्य() शामिल है और मॉड्यूल के खिलाफ जुड़े हुए हैं। जब कोई फ़ंक्शन गुम हो जाता है, तो लिंकर उचित चेतावनियों के साथ क्रोक करता है, इसलिए वहां सब अच्छा है। हालांकि, libtool मुझे एक चेतावनी देता है:

*** Warning: Linking the executable checkplugin_locprec against the loadable module 
*** liblocprec.so is not portable! 

मैं उद्देश्य और इस चेतावनी के इरादे को समझते हैं, लेकिन नहीं इसकी गंभीरता (-module के साथ बनाया गया एक पुस्तकालय के खिलाफ एक कार्यक्रम लिंक कर नहीं), और कहा कि मेरे सवाल है:

यह चेतावनी कितनी गंभीर है? क्या मैं बस भाग्यशाली हूं कि यह उन प्लेटफ़ॉर्म पर काम करता है जिन्हें मैं संकलित कर रहा हूं (i386/x86_64 लिनक्स और मिनजीडब्लू) या क्या यह चेतावनी कुछ अस्पष्ट बैकवुड प्लेटफ़ॉर्म के लिए प्रासंगिक है, जिसे मैं सुरक्षित रूप से अनदेखा कर सकता हूं?

+1

भाग्यशाली आप हैं। यह मैक ओएस एक्स पर काम नहीं करेगा। उदाहरण देखें [यहां] (http://stackoverflow.com/questions/2339679/what-are-the-differences-between-so-and-dylib-on-osx)। –

+0

@ एनएम। उस बिट के लिए धन्यवाद (यह भी एक अच्छा जवाब होगा)। खैर, अगर मैक ओएस एक्स मेरी एकमात्र समस्या है, तो मुझे वास्तव में राहत मिली है। – thiton

उत्तर

2

मुख्य प्लेटफॉर्म यह काम नहीं करता है मैक ओएस एक्स है। अन्य प्लेटफार्मों पर, इसे आम तौर पर काम करना चाहिए, लेकिन आपके द्वारा उपयोग किए जाने वाले अन्य निर्माण विकल्पों के आधार पर असफल हो सकता है। यदि आपने libtool का उपयोग किया है, तो आप शायद अन्य प्लेटफॉर्म पर सुरक्षित हैं।