2010-01-22 20 views
8

मैं एक ऐसा एप्लीकेशन विकसित कर रहा हूं जो जीस्ट्रीमर लाइब्रेरी का उपयोग करता हो। तैनाती को कम करने के लिए मैं स्थानीय बंडल में सभी जीस्ट्रीमर पुस्तकालयों को इकट्ठा करना चाहता हूं। इसके लिए मैं एक छोटे से स्क्रिप्ट जो निम्नलिखित करता लिखा है:गतिशील पुस्तकालयों पर निर्भर अनुप्रयोग को कैसे तैनात किया जाए?

  • रिकर्सिवली पार निर्भरता (otool -L का प्रयोग करके)
  • एक स्थानीय निर्देशिका
  • सभी निर्भरता रास्तों @executable_path के सापेक्ष बनाने के लिए प्रतिलिपि सभी निर्भरता (install_name_tool का उपयोग कर)

(आप रुचि रखते हैं, तो आप Ruby script पर एक नज़र हो सकता है।)

gst_init फोन पर हालांकि, मैं अब दिखाई दे रही है क्रम त्रुटियों: अगर मैं स्थानीय पुस्तकालयों का उपयोग

(process:22843): GLib-GObject-CRITICAL **: gtype.c:2458: initialization assertion failed, use g_type_init() prior to this function 

(process:22843): GLib-CRITICAL **: g_once_init_leave: assertion `initialization_value != 0' failed 

इन त्रुटियों को ही होते हैं।


क्या install_name_tool का उपयोग करने पर कुछ 'सामान्य नुकसान' हैं? क्या किसी को पता है कि मैं गलत क्या कर सकता हूं? अगर आपको कुछ विवरण जानने की ज़रूरत है तो पूछने के लिए स्वतंत्र महसूस करें।

  • निर्भर पुस्तकालयों के लिए मैं अब केवल dylib पथ बदल सकते हैं और न आईडी (केवल install_name_tool -change और नहीं install_name_tool -id का उपयोग करें):

    अद्यतन
    मैं कुछ चीजें बदल दिया है।

  • मुख्य पुस्तकालय के लिए मैंने निष्पादन योग्य पथ (@executable_name/components/Video.dylib) से संबंधित आईडी मान सेट किया है।

ये दो परिवर्तन इसे काम करते हैं। हालांकि यह अभी तक मुझे स्पष्ट नहीं है कि यह क्यों काम करता है। मुझे "आईडी" संपत्ति के अर्थ को समझने में कुछ परेशानी है। यह पथनाम के रूप में पहचानकर्ता प्रतीत होता है। आश्रित पुस्तकालयों के लिए इसे क्यों बदलना रनटाइम त्रुटियों का कारण बनता है? मैं कुछ और प्रयोगों के साथ उन सवालों के जवाब खोजने का प्रयास करूंगा ...

+0

क्या यह हो सकता है कि आप संबंधित निर्भरताओं के लिए दुर्घटना से लोड ऑर्डर को प्रभावित कर सकें? –

+0

@gf: मुझे ऐसा नहीं लगता है, लेकिन मैं इसे ध्यान में रखूंगा। मैंने कुछ प्रगति की है, यदि आप रुचि रखते हैं तो संपादन की जांच करें। – StackedCrooked

+0

क्या आप एक .app बंडल नहीं बना रहे हैं? –

उत्तर

1

शायद आपको अपने कोड का एक स्थिर संकलन मानना ​​चाहिए। इस अपने कार्यक्रम के लिए अपने निर्भरता जोड़ देती है ज्यादा बेहतर

तुम सिर्फ जोड़ने -static

0

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

This site probably contains some usefull info स्टैंड-अलोन जीस्ट्रीमर पैकेज बनाने पर, जो बंडलिंग प्रॉपस को सरल बना सकता है।

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

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