2009-09-17 15 views
8

मेरे पास एक यूनिक्स कमांड लाइन ऐप है (बड़ी गंदी मेकफ़ाइल के साथ) कि मैं मैक पर चलाने की कोशिश कर रहा हूं। मैं पाठ्यक्रम के सभी उपयुक्त पुस्तकालयों के साथ, 10.6 सिस्टम पर संकलित कर रहा हूं। तैनाती पर्यावरण 10.5 सिस्टम है, जिसमें कोई अतिरिक्त पुस्तकालय नहीं है।संस्करण-क्रॉस-संकलित प्रोग्राम में स्टेटिक लाइब्रेरी

मैंने बिना गतिशील संकलित किया, और ऐसा लगता है कि स्थिर पुस्तकालय सही ढंग से हैं। जब मैं इसे 10.6 सिस्टम पर चलाता हूं, तो यह काम करता है। हालांकि, जब मैं 10.5 प्रणाली पर चला, मैं मिलता है:

dyld: अज्ञात आवश्यक लोड आदेश 0x80000022

मैं इस एक ही त्रुटि जब मैं 10.5 xcode का उपयोग कर 10.6 प्रणाली के लिए चीजों को संकलित मिल गया है, तो यह लग रहा है एक संस्करण गलत मिलान प्रकार की समस्या की तरह। हालांकि, मैं जीसीसी-4.0, और

$ CFLAGS = -isysroot /Developer/SDKs/MacOSX10.5.sdk -mmacosx-संस्करण मिनट = 10.5

तो यह 10.5 के लिए स्थापित किया जाना चाहिए इस्तेमाल किया .. । कोई विचार?

धन्यवाद

एक प्राचीन प्रश्न संपादित करना:

मैं किसी अन्य कंप्यूटर पर ठीक उसी समस्या है। इस बार मैं 10.5.8 पर हूं, पूरी तरह अद्यतन करता हूं, वही निष्पादन योग्य काम 10.6 पर अभी भी।

क्या मैंने यह पूछने के महीनों में किसी के साथ कोई भाग्य लिया है?

+0

जब मैं समस्या का सामना करता हूं तो मुझे आपका प्रश्न मिलता है। सौभाग्य! – Alan

+0

हे, हाँ, मेरे पास सेब देव साइट पर बिल्कुल वही अनुभव था ... मुझे अपने पुराने प्रश्न का पता चला ... –

+0

मुझे एक ही समस्या है। –

उत्तर

0

आप कितने पुस्तकालयों का उपयोग करते हैं, इस पर निर्भर करते हुए, उन सभी को स्थैतिक रूप से लिंक करना मुश्किल हो सकता है। "Otool -L your_binary 'आपको क्या बताता है?

अपने स्वयं के एप्लिकेशन के लिए एक स्वयं निहित पैकेज प्राप्त करने के लिए, मैंने एक कस्टम मैकपॉर्ट्स को एक गैर-मानक निर्देशिका में स्थापित किया है, ताकि मैं इसके साथ डिनलिंक कर सकूं उस निर्देशिका से पुस्तकालयों और केवल लोगों को अपने कंप्यूटर पर एक ही स्थान पर पूरी चीज स्थापित करने के लिए कहने में बाध्य होना चाहिए। मैक भावना बिल्कुल नहीं, लेकिन यह यूनिक्स ऐप है और आपको यूनिक्स के उपयोग से परिचित होने की आवश्यकता है यह वैसे भी।

गुड लक

पास्कल

+0

खैर, कम से कम गैर-मानक पुस्तकालय (/ usr/lib/X11/libexpat * को छोड़कर, जो कुछ भी है, जो 10.5 पर चित्रित हो गया है, लेकिन मुझे अभी भी किसी भी कारण की आवश्यकता है) संकलित हो गया है ... और वह वैसे भी "अज्ञात लोड कमांड" समस्या नहीं है ... –

+0

मैंने इसे नहीं सोचा था, लेकिन अब जब आप इसका उल्लेख करते हैं, गतिशील रूप से * लोड * पुस्तकालय, जो ओटोल-एल के साथ भी दिखाई नहीं दे रहे हैं, हो सकता है कारण मैं सबकुछ स्थिर रूप से जोड़ने की अपनी समस्याएं थीं। –

0

यह पता चला एक गतिशील एल है कि वहाँ ibrary लोड फ़ंक्शन (0x22) जो 10.5.6 पर जोड़ा गया। जिस प्रणाली पर मैं चल रहा था वह 10.5.5 था। मैं 10.5.8 तक अपग्रेड किया, और सबकुछ चलता है!

+0

नहीं, एक अलग कंप्यूटर पर, 10.5.8 और यह नहीं चलता है ... dagnabit। –

0

ठीक, दूसरा समाधान, और बहुत संतोषजनक नहीं है, 10.5.8 कंप्यूटर ढूंढना, डेवलपर पैकेज स्थापित करना और फिर से संकलित करना ... PowerPC के लिए समान ... उदास लेकिन यह काम करेगा ...

2

मैं उसी मुद्दे की खोज कर रहा हूं, जैसा कि मैं 10.6 पर विकसित करता हूं लेकिन इसमें एक संस्करण होना चाहिए जो 10.5 पर काम करता हो। इसके बाद के संस्करण संकलक झंडे के अलावा, आप जोड़ना चाहिए:

-no_compact_linkedit

यह यहाँ वर्णित है:

http://developer.apple.com/mac/library/documentation/Darwin/Reference/ManPages/man1/ld.1.html

जहां यह कहते हैं:

आम तौर पर जब मैक ओएस को लक्षित एक्स 10.6, लिंकर __LINKEDIT सेगमेंट में कॉम्पैक्ट जानकारी उत्पन्न करेगा।यह विकल्प लिंकर को पारंपरिक स्थानांतरण जानकारी का उत्पादन करने का कारण बनता है।

मैं "अज्ञात आवश्यक लोड कमांड 0x80000022" के बारे में एक्सकोड-उपयोगकर्ता मेलिंग सूची पर चर्चा से वहां गया।

+1

मैं ओएस एक्स 10.7 पर एक साधारण निष्पादन योग्य बनाता हूं जो ओएस एक्स 10.5.10 पर दुर्घटनाग्रस्त हो जाता है, लेकिन आपके सुझाए गए कंपाइलर विकल्प * -no_compact_linkedit * इस विकल्प के बिना बाइट-वार सटीक आउटपुट उत्पन्न करता है। :( – Mot

1

मैं -mmacosx-version-min=10.5लिंकर पर पास करके इसे हल करने में सक्षम था, उदा। --extra-ldflags="-mmacosx-version-min=10.5" ffmpeg के लिए configure पर पास किया गया जिसे मैं साझा कर रहा था। अधिक जानकारी: http://lists.apple.com/archives/xcode-users/2009/Oct/msg00530.html

3

dyld 0×80000022 त्रुटि के लिए कारण हो सकता है, आप OS X 10.6 पर लिंक कर रहे हैं, और OS X 10.6 एक लोड कमांड (LC_DYLD_INFO_ONLY = 0×80000022) OS X 10.5 करता है कि समझ में नहीं का प्रयोग करेंगे।

इसे ठीक करने के लिए, बस अपने लिंक आदेश से पहले वातावरण चर सेट करके सुनिश्चित करें कि आप एक तैनाती लक्ष्य उपयोग कर रहे हैं:

export MACOSX_DEPLOYMENT_TARGET=10.5 

(या setenv MACOSX_DEPLOYMENT_TARGET=10.5)

आपको हमेशा यह सुनिश्चित कर सकते हैं कि यदि आपके निष्पादन का उपयोग करता है इस तरह सही लोड आदेश:

otool -l executable 

यह या तो दिखाएगा LC_DYLD_INFO_ONLY (तैनाती लक्ष्य के बिना) अल्पविराम nds या LC_DYLD_INFO (तैनाती लक्ष्य के साथ)।

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