2010-04-11 8 views
11

मै मैक ओएस एक्स 10.6 एसडीके का उपयोग कर रहा हूं और मेरा परिनियोजन लक्ष्य मैक ओएस 10.5 पर सेट है। मैं libcrypto से जुड़ा हूं (एक्वाटिकप्रिम को इसकी आवश्यकता है) और पता चला कि मेरा ऐप तेंदुए पर लॉन्च नहीं होता है। त्रुटितेंदुए के लिए libcrypto से जोड़ने?

dyld: Library not loaded: /usr/lib/libcrypto.0.9.8.dylib

मैं निम्न उपायों की कोशिश की है है, लेकिन उनमें से कोई भी काम करते हैं:

  • libcrypto.0.9.7.dylib को सीधे लिंक करना (10.6 एसडीके libcrypto.0.9.7.dylib साथ सीधे लिंक करने के लिए मना कर दिया
  • प्रतिलिपि बनाई जा रही। 10.5 एसडीके का संस्करण libcrypto.0.9.7.dylib का 10.6 lib निर्देशिका में और इसके साथ लिंक करने का प्रयास करें (इस बार लिंक प्रक्रिया सफल हुई लेकिन तेंदुए में ऐप अभी भी मौजूद नहीं है libcrypto.0.9.8.dylib फ़ाइल और इस प्रकार लॉन्च नहीं होगा)
  • मैक ओएस एक्स 10.5.8 स्थापना से libcrypto.0.9.7.dylib की प्रतिलिपि बनाना और इसके साथ लिंक (लिंक सफल था लेकिन ऐप अभी भी libcrypto.0.9.8.dylib की तलाश में है)।

क्या इस पुस्तकालय से लिंक करने का कोई तरीका है और अभी भी 10.6 एसडीके का उपयोग करें?

धन्यवाद।

+0

का वर्णन आप कैसे हैं पुस्तकालय से जुड़ा हुआ है। मैं इसका उपयोग ठीक कर रहा हूं, जैसे कि अन्य हैं, इसलिए या तो आपके इंस्टॉलेशन में कुछ गड़बड़ है या आप गलत तरीके से लिंक कर रहे हैं। –

उत्तर

1

आप अपनी लक्षित बिल्ड सेटिंग्स में आधार एसडीके को 10.5 पर सेट करने का प्रयास कर सकते हैं।

+0

हाँ .. यह एक काम किया। मैंने बेस एसडीके को 10.5 पर सेट किया है लेकिन सक्रिय एसडीके को 10.6 पर सेट किया है। इस तरह मेरे पास 10.6 स्रोत कोड हैं (उदा। वे जो 10.6 प्रोटोकॉल लागू करते हैं) और अभी भी ऐप को 10.5 में चलाने में सक्षम हैं। धन्यवाद। – adib

+0

अब एक्सकोड 3.2.3 में "सक्रिय एसडीके" विकल्प हटा दिया गया है, मुझे इस मुद्दे के लिए क्या करना चाहिए? – adib

+0

अब आप विकल्पों में थोड़ा सीमित हैं। समस्या तब होती है क्योंकि 10.6 एसडीके में libcrypto का एक संस्करण है जो 10.5 में जहाजों के साथ असंगत है। बेस एसडीके को 10.5 पर सेट करके, आप कह रहे हैं कि यह अधिकतम एसडीके संस्करण है जिसे आप उपयोग करने जा रहे हैं। तकनीकी रूप से, आपको 10.6 हेडर का उपयोग नहीं करना चाहिए। – JeremyP

0

क्या आपने विशिष्ट संस्करणों के बजाय libcrypto.0.9.dylib या libcrypto.dylib के खिलाफ लिंक करने का प्रयास किया है?

+0

हां। - 'libcrypto.0.9.dylib' से लिंक करने से लिंकर त्रुटियां - 'libcrypto.dylib' लिंक से लिंक हो जाती हैं और बस ठीक बनाती हैं लेकिन ऐप तेंदुए में लॉन्च करने में विफल रहता है। – adib

22

इस सूत्र यहाँ (सूत्र में पहली पोस्ट: "libcrypto Snow Leopard पर" http://lists.apple.com/archives/cocoa-dev/2009/Aug/msg01737.html, धागा सूची: http://lists.apple.com/archives/cocoa-dev/2009/Aug/thrd19.html) के अनुसार, मेरा मानना ​​है कि समाधान निम्न करने के लिए है:

  1. गो/डेवलपर के लिए /SDKs/MacOSX10.5.sdk/usr/lib/। इस फ़ोल्डर से, अपने प्रोजेक्ट स्रोत फ़ोल्डर में "libcrypto.0.9.7.dylib" कॉपी करें।

  2. उस फ़ाइल का नाम बदलें जिसे आपने अभी "libmycrypto.dylib" पर कॉपी किया है।

  3. उस फ़ाइल को जोड़ें जिसे आपने अभी अपनी परियोजना में बदल दिया है। अपने प्रोजेक्ट से किसी अन्य लिंक किए गए libcrypto ढांचे को हटाना सुनिश्चित करें।

  4. अपनी बिल्ड सेटिंग्स के माध्यम से जाएं, और सुनिश्चित करें कि "-lcrypto" लिंकर ध्वज हटा दें। (यह आमतौर पर "अन्य लिंकर झंडे" सेटिंग में रखा है।)

अब आप अपनी परियोजना का निर्माण करने में सक्षम होना चाहिए और यह 10.5 और 10.6 दोनों पर काम करेंगे।

(libcrypto.0.9.7 10.5 और 10.6 दोनों पर उपलब्ध है। आप जिस फ़ाइल को कॉपी किया सिर्फ हेडर की ठूंठ है, लेकिन तुम सिर्फ इसके खिलाफ लिंक कर रहे हैं, नहीं अपनी परियोजना में एम्बेड। के बाद से लिंकर इंस्टॉल पथ का उपयोग करता है, जो कि "libmycrypto.dylib" नामक पथ विवादों को समाप्त करता है, लेकिन आपको अभी भी लाइब्रेरी के विरुद्ध लिंक करने की अनुमति देता है।

FWIW, यह एक एक्सकोड समस्या है। /usr/lib/libcrypto.dylib के खिलाफ लिंक करने में सक्षम हो - प्रतीकात्मक लिंक - और यह 10.5 और 10.6 दोनों पर libcrypto के सही संस्करण को लक्षित करता है। हालांकि, जब Xcode हमेशा संस्करण 0.9.8 से लिंक करता है कुछ कारणों से हिम तेंदुए।)

+0

ग्रेट उत्तर, बस जो मैं खोज रहा था। चीयर्स। –

+1

यदि आप 10.6+ पर अपना ऐप बनाना चाहते हैं, लेकिन इसे 10.5 पर चलाएं, तो यह वह जवाब है जिसका उपयोग आप करना चाहिए (उपरोक्त चेक नहीं किया गया।) इसके अलावा: जब आप लिंकर फ्लिकर फ्लैग की तलाश में हैं, तो याद रखें कि वे हो सकते हैं परियोजना स्तर सेटिंग्स के साथ-साथ व्यक्तिगत लक्ष्यों दोनों में। सुनिश्चित करें कि आप उनमें से सभी को हटा दें। – chockenberry

+0

शायद यह ऑब्जेक्टिव सी के साथ काम करेगा, लेकिन सी ++/जीसीसी के साथ नहीं। केवल 10.5 एसडीके के माध्यम से -इसिसरूट विकल्प का उपयोग libssl/libcrypto के 0.9.7 संस्करणों के खिलाफ लिंक करने के लिए किया गया है - आपको न केवल उन dylibs के खिलाफ LINK की आवश्यकता है, बल्कि 0.9.7 की उनकी एच फ़ाइलों का उपयोग करके COMPILE की आवश्यकता है। 10.5 एसडीके का उपयोग करते हुए 10.5/10.8 पर निर्माण करते समय, 10.5 एसडीके के एसटीएल हेडर में गहरे, i686-apple-darwin10 जैसे symlinks i686-apple-darwin9 को इंगित करते हैं। आपको डार्विन 11 और डार्विन 12 (i686 और x86_64 दोनों के लिए) के लिए ऐसे सिम्लिंक बनाने की आवश्यकता है। सटीक होने के लिए, उन सिम्लिंक के साथ निर्देशिका /MacOSX10.5.sdk/usr/include/c++/4.2.1 है। –

1

आप जिस चीज के लिए lib का उपयोग कर रहे हैं उसके आधार पर, आप libcrypto को CommonCrypto से प्रतिस्थापित करने में सक्षम हो सकते हैं जो 10.5 और 10.6 दोनों के साथ अच्छी तरह से काम करता है। मैंने केवल एमडी 5 फ़ंक्शन के लिए libcrypto का उपयोग किया है, इसलिए मैंने openssl/md5.h को CommonCrypto/CommonDigest.h और MD5() को CC_MD5() के साथ, और कॉमनक्रिप्टो के साथ libcrypto के साथ बदल दिया है, और अब यह दोनों तेंदुए पर काम करता है।

0

तेंदुए ओएस एक्स एक libcrypto और libssl के साथ जहाज है कि केवल पीपीसी वास्तुकला है।

एक साधारण समाधान जिसे ऐप के कोड को बदलने की आवश्यकता नहीं है, अपने libcrypto.0.9.dylib, libcrypto.0.9.8.dylib, libssl0.9.dylib, libssl.0.9.8.dylib का बैकअप लेना है और libcrypto.0.9.7.dylib और libssl.0.9.7.dylib पर प्रतिलिपि बनाएँ।

आप अपने अनुप्रयोग फ़ोल्डर में ये परिवर्तन करने के लिए Terminal.app उपयोग कर सकते हैं:

cd /usr/lib 
    sudo cp libcrypto.0.9.dylib libcrypto.0.9.dylib.old 
    sudo cp libssl.0.9.dylib libssl.0.9.dylib.old 
    sudo ln -sf libcrypto.0.9.7.dylib libcrypto.0.9.dylib 
    sudo ln -sf libssl.0.9.7.dylib libssl.0.9.dylib 

यहाँ एक वैकल्पिक समाधान आप ताज़ी openssl संस्करण पर बना देता है कि है:

1. reactivate the current openssl: port activate [email protected]_0 (or whatever) 
    2. clean up your old unwanted versions of everything: port uninstall inactive 
    3. uninstall badly behaved ports: port uninstall md5sha1sum subversion neon 
    4. get them back: port install subversion md5sha1sum 
संबंधित मुद्दे