2015-03-07 10 views
6

पर मोनोकिस्टार्ट का उपयोग करते समय नहीं मिला है, मैं ओपनएक्स पर चल रहा है - जो ओपनटीके पर बनाया गया है - जो हमारी परियोजना प्राप्त करने के लिए मोनोकिस्टार्ट का उपयोग कर रहा है। मैं इस कार्यक्रम को पूरी तरह से काम करने के लिए मिल गया है, लेकिन एक बार मैं अपने Mono.framework हटाया (ठीक है, वास्तव में नाम बदला) निम्न त्रुटि ऊपर पॉप:gdiplus.dll ओएसएक्स

[ERROR] FATAL UNHANDLED EXCEPTION: System.TypeInitializationException: An exception was thrown by the type initializer for System.Drawing.GDIPlus ---> System.DllNotFoundException: gdiplus.dll 
    at (wrapper managed-to-native) System.Drawing.GDIPlus:GdiplusStartup (ulong&,System.Drawing.GdiplusStartupInput&,System.Drawing.GdiplusStartupOutput&) 
    at System.Drawing.GDIPlus..cctor() [0x00000] in <filename unknown>:0 
    --- End of inner exception stack trace --- 
    at System.Drawing.Bitmap..ctor (System.String filename, Boolean useIcm) [0x00000] in <filename unknown>:0 
    at System.Drawing.Bitmap..ctor (System.String filename) [0x00000] in <filename unknown>:0 
    at (wrapper remoting-invoke-with-check) System.Drawing.Bitmap:.ctor (string) 
(...) 

मैं अपने मोनो से "libgdiplus.0.dylib" जोड़ने की कोशिश की है शामिल ओएसएक्स फ़ोल्डर (जहां मोनो गतिशील पुस्तकालय भी बैठते हैं) और निष्पादन योग्य फ़ोल्डर में स्थापना। त्रुटि संदेश में फ़ाइल नाम बदलने के अलावा, एक dllmap बनाना भी कुछ भी नहीं करता है।

मैं sgen संस्करण का उपयोग कर रहा हूं, इसलिए x64 में चलना समस्या नहीं हो सकती है (इस बारे में चर्चा के लिए here भी देखें)।

+0

मोनो का कौन-सा संस्करण स्थापित किया है है पर देखने के? (3.10 GDIPlus साथ समस्या नहीं थी) और कैसे आप मोनो स्थापित किया (हाल ही में उपयोगकर्ता मोनो के साथ समस्याओं काढ़ा (भी GDIPlus साथ से स्थापित किया था) ...) http://www.mono-project.com/download/#download-mac –

+0

का उपयोग करें मैंने मोनो को मूल मोनो डीएमजी के माध्यम से स्थापित किया। मुझे लगता है कि मेरे पास 3.12 इंस्टॉल है, हालांकि मुझे यकीन नहीं है कि कौन सा संस्करण मोनोकिस्टार्ट के साथ एम्बेडेड है (मुझे मोनो 2.10.9 के कुछ उल्लेख दिखाई देते हैं, लेकिन मुझे पूरा यकीन है कि हमारा गेम उस पर नहीं चलता है)। मैं निष्पादन योग्य के साथ थोड़ा सा कोशिश करता हूं और खेलता हूं। – Tom

+0

मैंने इसके बजाय मोनो के बोहेम संस्करण का उपयोग करने का प्रयास किया है। हालांकि यह अभी भी समस्या का समाधान नहीं करता है। मेरा संदेह यह था कि समस्या x64 और x86 के बीच का अंतर था, लेकिन डिफ़ॉल्ट वसा निष्पादन योग्य के वसा संस्करण और x86 संस्करण दोनों एक ही त्रुटि का कारण बनते हैं। मैं एक है कि मेरे मोनो के साथ आता है के साथ libmono-2.0.1.dylib की जगह की कोशिश की है, लेकिन वह निम्न त्रुटि का कारण बनता है: dyld: प्रतीक नहीं मिला: _kCFLocaleCountryCode – Tom

उत्तर

2

यह त्रुटि का अर्थ है कि मोनो लाइब्रेरी का पता लगाने में असमर्थ था, जिसमें आप कक्षाओं में से एक को उपयोग करने की कोशिश कर रहे हैं।

.NET Framework के साथ संगतता को संरक्षित रखने के लिए, मोनो उसी लाइब्रेरी नामों को विंडोज के रूप में उपयोग करता है। इन नामों को DllMaps का उपयोग करके लिनक्स लाइब्रेरी नामों में मैप किया गया है।

(स्थानापन्न "तो" MacOS एक्स के लिए "dylib" के साथ)

एक पुस्तकालय स्थान स्पष्ट रूप से एक आवेदन पत्र या विधानसभा .config फ़ाइल में एक DllMap प्रविष्टि में निर्दिष्ट नहीं किया गया है, मोनो एक के लिए खोज करेंगे पुस्तकालय कुछ स्थानों में:

निर्देशिका जहां संदर्भ छवि लोड की गई थी। किसी भी स्थान पर सिस्टम के गतिशील लोडर को साझा पुस्तकालयों को देखने के लिए कॉन्फ़िगर किया गया है। उदाहरण के लिए लिनक्स पर यह $ LD_LIBRARY_PATH पर्यावरण चर और /etc/ld.so.conf फ़ाइल में निर्दिष्ट है। विंडोज़ पर $ PATH पर्यावरण चर का उपयोग किया जाता है, इसके बजाए। समस्या को हल करने में अगला चरण आपके सिस्टम पर फ़ाइल ढूंढ रहा है।

$ find/usr -name libgdiplus.so /usr/local/lib/libgdiplus.so आह! वो रहा। तो मोनो इसे क्यों नहीं ढूंढ सकता?

मूल रूप से लिनक्स के सभी वितरण में गतिशील लिंकर केवल/lib और/usr/lib में फ़ाइलों के लिए कैश बनाता है। चूंकि आपने अपनी लाइब्रेरी को/usr/local/lib में रखा है, इसलिए यह इसके बारे में नहीं जानता है। आप निम्न आदेश का उपयोग करके इसे सत्यापित कर सकते हैं:

ldconfig -p | grep libgdiplus कमांड को कोई आउटपुट नहीं देना चाहिए, क्योंकि यह फ़ाइल के बारे में नहीं जानता है।

इस समस्या को ठीक करने का सही तरीका है/usr/local/lib को ldconfig अनुक्रमणिका के पथों में से एक के रूप में जोड़ना है। ऐसा करने के लिए, /etc/ld.so.conf पर पथ जोड़ें और रूट के रूप में "ldconfig" चलाएं, जो कैश को पुनर्निर्मित करने के लिए मजबूर करेगा।

डायनामिक लिंकर को अब इस पथ में सभी पुस्तकालयों के बारे में पता होना चाहिए। आप एक बार फिर से उपरोक्त आदेश टाइप करके इसकी पुष्टि कर सकते हैं:

$ ldconfig -p | libgdiplus libgdiplus.so (libc6) ग्रेप => Yay /usr/local/lib/libgdiplus.so! आपका आवेदन अब ठीक से चलाना चाहिए।

नोट: जैसा ऊपर बताया गया है, आप लाइब्रेरी युक्त पथ पर $ LD_LIBRARY_PATH पर्यावरण चर सेट भी कर सकते हैं, लेकिन यह अनुशंसित नहीं है क्योंकि इससे अन्य समस्याएं पैदा हो सकती हैं और इसे बनाए रखना अधिक कठिन होता है।

अधिक जानकारी के लिए http://www.mono-project.com/docs/advanced/pinvoke/dllnotfoundexception/

+1

'ढूंढें/-नाम \ * gdiplus \ *' ओएसएक्स योसामेट पर मोनो 4.2.0 स्थापित के साथ कुछ भी नहीं पैदा करता है। कोई विचार? – weberc2

+0

ऐसा लगता है कि मुझे मोनो-एमडीके इंस्टॉल करने की आवश्यकता है, लेकिन अब आवश्यक लाइब्रेरी अभी भी जुड़ी नहीं है, और मैं 'ldconfig -p' के ओएसएक्स संस्करण को नहीं समझ सकता – weberc2