आप सीधे निष्पादन योग्य के अंदर एक डाइलिब नहीं डाल सकते हैं। (यह बहुत कुछ है कि बंडलों का आविष्कार किया गया था-लेकिन यह कमांड लाइन टूल्स के साथ आपकी मदद नहीं करता है।)
आप प्रत्येक डाइलिब को स्थैतिक (.a) लाइब्रेरी के रूप में पुनर्निर्माण कर सकते हैं, इस मामले में आपके कोड को निष्पादन योग्य जरूरतों को निष्पादन योग्य में कॉपी किया जाएगा, और आपको इसके साथ कुछ भी वितरित करने की आवश्यकता नहीं है। यदि आपको पुस्तकालयों का स्रोत मिल गया है, तो यह आमतौर पर बहुत आसान होता है-लेकिन यह जानने के बिना कि आप चीजों को कैसे बना रहे हैं, आपको यह बताना मुश्किल है कि क्या बदलना है।
स्थैतिक लिंकिंग के साथ ध्यान में रखना एक बात यह है कि इससे यह प्रभावित होता है कि विभिन्न लाइसेंस एक साथ कैसे खेलते हैं। विशेष रूप से, यदि आप जिन पुस्तकालयों का उपयोग कर रहे हैं वे एलजीपीएल-लाइसेंसीकृत हैं, तो उन्हें स्थिर करने से परिणामस्वरूप गतिशील लिंकिंग नहीं होती है। अधिक जानकारी के लिए this question (और उत्तर पर दिए गए लिंक) देखें, लेकिन वास्तव में, आपको लाइसेंस पर कानूनी सलाह के लिए स्टैक ओवरफ़्लो पर उत्तरों पर भरोसा नहीं करना चाहिए। वैसे भी, शायद यह ओपी के लिए कोई मुद्दा नहीं है "मैं एक कार्यक्रम बनाना चाहता हूं और इसे अपने दोस्त को देना चाहता हूं", लेकिन बाद में इस प्रश्न को पढ़ने वाले अन्य लोगों के लिए यह हो सकता है।
यदि स्थिर लिंकिंग संभव नहीं है या वांछनीय है, तो आपको केवल निष्पादन योग्य और dylibs को पैकेज करना होगा और उन्हें अपने मित्र की मशीन पर ले जाना होगा। चूंकि वह जाहिर तौर पर एक इंस्टॉलर चलाने के लिए नहीं चाहता है, इसका मतलब है कि एक टैरबॉल या ज़िपफाइल।
एकमात्र मुश्किल हिस्सा यह सुनिश्चित कर रहा है कि exe जानता है कि dylibs कहां मिलें। जब तक कि प्रत्येक डाइलीब या तो डायल सर्च पथ में नहीं है (अधिक जानकारी के लिए डाइल्ड के लिए मैनपेज देखें, लेकिन अगर आप कुछ भी इंस्टॉल नहीं करना चाहते हैं तो यह आपकी मदद नहीं करेगा), या उसी जगह में यह वही था जब आप उस समय थे इसे लिंक किया गया है, निष्पादन योग्य चल रहा है dyld से "छवि नहीं मिली" त्रुटि के साथ विफल हो जाएगा।
सौभाग्य से, "सटीक एक ही स्थान" का अर्थ "@ execableable_path/libfoo.dylib" जैसे जादू पथ का हो सकता है, जिसका अर्थ है "पूर्ण निर्देशिका जैसे" myexe "में,"/opt/local/lib /libfoo.dylib "या एक सापेक्ष पथ जैसे" ../../foo/build/Release/libfoo.dylib "।(ध्यान दें कि सामान्य संबंधित पथ वर्तमान कार्यशील निर्देशिका, नहीं निष्पादन योग्य या बंडल निर्देशिका के सापेक्ष हैं।)
आप देख सकते हैं जहां myexe ऐसा करके देख रहा है:
otool -L myexe
कोई भी चीज जो में देख नहीं कर रहा है @ executable_path (सामान को छोड़कर/lib और/usr/lib, जो ओएस का हिस्सा है और वितरित करने के लिए की जरूरत नहीं है) में, आप इस तरह ठीक कर सकते हैं:
install_name_tool -change ../../../mydl/build/Release/libmydl.dylib @executable_path/libmydl.dylib myexe
अब, आप बस सभी नकल करने की जरूरत है उन dylibs सही myexe के बगल में, इसे बंद करो, और इसे अपने दोस्त को देते हैं, और वह सिर्फ इसे हटा सकता है और exe चला सकते हैं।
क्या आप कृपया अर्नर्नर्ट के उत्तर को स्वीकार कर सकते हैं? इससे अन्य लोगों को यह पता चलने में मदद मिलेगी। यह मेरे लिए बहुत ही मददगार रहा। – Yitz
हो गया। विलंब के लिए खेद है। – Olie