आपके औसत डेस्कटॉप लिनक्स में OS X की तुलना में अधिक समृद्ध उपयोगकर्ता है।
आप शायद मेरे द्वारा किए गए अलग-अलग टूल को याद करेंगे, इसलिए प्रतिस्थापन के लिए सिफारिशों के बारे में कोई विशेष जानकारी नहीं है।
इसके बजाय, बस पहली बात Fink , MacPorts , या Homebrew स्थापित करें । ये सिस्टम लिनक्स या बीएसडी के लिए विशिष्ट पैकेज प्रबंधन प्रणाली प्रदान करते हैं। प्रत्येक का अपना स्वाद और पैकेज सेट है, इसलिए सही विकल्प आपके स्वाद और जरूरतों पर आधारित होगा।
आप पा सकते हैं कि किसी भी पैकेज सिस्टम में आपके लिए आवश्यक हर प्रोग्राम नहीं होगा। कुछ कार्यक्रमों को अभी तक ओएस एक्स में पोर्ट नहीं किया गया है, इसलिए वे किसी भी पैकेज सिस्टम में दिखाई नहीं देंगे । फिर भी, ये प्रणालियां ओएस एक्स के साथ किन जहाजों का विस्तार करती हैं, और लिनक्स से आपके संक्रमण को कम कर देंगी।
OS X कमांड लाइन कंपाइलर अब डिफ़ॉल्ट रूप से 64-बिट निष्पादन योग्य बनाता है।
तेंदुए और इससे पहले, संकलक ने डिफ़ॉल्ट रूप से इसके बजाय 32-बिट निष्पादन योग्य बनाया। यह कई मायनों में समस्या पैदा कर सकता है: हो सकता है कि आपके पास पुरानी 32-बिट लाइब्रेरी हों जिन्हें आप पुनर्निर्माण नहीं कर सकते, लेकिन लिंक करना होगा, हो सकता है कि आप अभी भी 32-बिट मोड में अपना सिस्टम चला रहे हों, आदि।
32-बिट बिल्ड को बाध्य करने का एक तरीका gcc
बिल्ड सिस्टम में चूक को ओवरराइड करना है gcc-4.0
, जो कि पुराने 32-बिट्स-बाय डिफ़ॉल्ट तेंदुए कंपाइलर हैं। ( स्नो लेपर्ड पर gcc
64-बिट-बाय-डिफॉल्ट के लिए एक सिमलिंक है gcc-4.2
।) ऑटोकैनफ आधारित बिल्ड सिस्टम के साथ, यह काम करता है:
$ ./configure CC=gcc-4.0 CXX=g++-4.0
( CXX
यदि प्रोग्राम में C ++ घटक हैं तो आपको केवल इसकी आवश्यकता होगी ।)
एक और तरीका -m32
संकलक और लिंकर को पास करना है:
$ ./configure CFLAGS=-m32 CXXFLAGS=-m32 LDFLAGS=-m32
यह अधिक टाइपिंग है, लेकिन यह आपको नए जीसीसी से 32-बिट बनाता है।
डायनेमिक लिंकेज काफी अलग है।
यदि आप अपनी ld
आज्ञाओं को हाथ से लिखने के लिए तैयार हैं , तो उस आदत को तोड़ने का समय आ गया है। इसके बजाय आपको संकलक के माध्यम से कार्यक्रमों और पुस्तकालयों को जोड़ना चाहिए, या जैसे मध्यस्थ का उपयोग करना चाहिए libtool
। ये निगली प्लेटफ़ॉर्म-विशिष्ट लिंक स्कीम के अंतरों का ध्यान रखते हैं, इसलिए आप उन पोर्टेबल प्रोग्रामों को सीखने के लिए मस्तिष्क की शक्ति बचा सकते हैं जिन्हें आप अलग-अलग नहीं कर सकते हैं।
उदाहरण के लिए, यदि आप अपने मांसपेशी स्मृति अद्यतन करने के लिए ताकि आप टाइप की आवश्यकता होगी otool -L someprogram
बजाय ldd someprogram
क्या पुस्तकालयों यह पता लगाने की someprogram
से जुड़ा हुआ है।
डायनेमिक लिंकेज में एक और अंतर जो आपके दिमाग को सबसे पहले मोड़ देगा वह यह है कि ओएस एक्स पर, लाइब्रेरी के लिए इंस्टॉलेशन लोकेशन लाइब्रेरी में ही रिकॉर्ड की जाती है , और लिंकर कॉपी करता है जो कि लिंक टाइम में एक्जीक्यूटेबल में होता है। इसका मतलब है कि यदि आप किसी ऐसी लाइब्रेरी से जुड़ते हैं जो स्थापित हो गई है, /usr/local/lib
लेकिन आप इसे अपने उपयोगकर्ताओं को निष्पादन योग्य के रूप में उसी निर्देशिका में शिप करना चाहते हैं, तो आपको अपनी इंस्टॉल प्रक्रिया के भाग के रूप में ऐसा कुछ कहने की आवश्यकता है:
$ cp /usr/local/lib/libfoo.dylib .
$ install_name_tool -id @loader_path/libfoo.dylib libfoo.dylib
$ make LDFLAGS=-L. relink
अब, उपरोक्त में से अधिकांश आपके निर्माण प्रणाली के लिए अलग-अलग होने की संभावना है, इसलिए इसे केवल एक उदाहरण के रूप में लें, बजाय एक नुस्खा के। यह क्या करता है एक पुस्तकालय की एक निजी प्रतिलिपि बनाता है जिसे हम लिंक करते हैं, अपने साझा पुस्तकालय पहचानकर्ता को एक निरपेक्ष पथ से एक रिश्तेदार एक अर्थ में "निष्पादन योग्य के समान निर्देशिका" में बदल देता है, फिर इस संशोधित प्रतिलिपि के खिलाफ निष्पादन योग्य के पुनर्निर्माण के लिए बाध्य करता है पुस्तकालय का।
install_name_tool
यहाँ मुख्य आदेश है। यदि आप ../lib
निष्पादन योग्य के सापेक्ष किसी निर्देशिका में लाइब्रेरी स्थापित करना चाहते हैं, तो इसके बजाय -id
तर्क की आवश्यकता होगी @loader_path/../lib/libfoo.dylib
।
जो डी पोल ने इस पर एक अच्छा लेख लिखा , जिसमें बहुत अधिक विवरण है।
डायनेमिक लिंकेज + थर्ड पार्टी पैकेज जल्दी सिरदर्द पैदा कर सकते हैं।
जैसे ही आप तृतीय-पक्ष पैकेजों से पुस्तकालयों का उपयोग करने की कोशिश करना शुरू करते हैं, आप पुस्तकालयों को मानक स्थानों में स्थापित नहीं करने की कोशिश करते हैं, जैसे ही आप डायनेमिक लिंकेज के मुद्दों में भाग लेंगे। MacPorts ऐसा करता है, उदाहरण के लिए, पुस्तकालयों को स्थापित करने के /opt/local/lib
बजाय /usr/lib
या /usr/local/lib
। जब आप इसमें भाग लेते हैं, तो समस्या के लिए एक अच्छा निर्धारण आपके लिए निम्नलिखित की तरह लाइनें जोड़ना है .bash_profile
:
# Tell the dynamic linker (dyld) where to find MacPorts package libs
export DYLD_LIBRARY_PATH=/opt/local/lib:$DYLD_LIBRARY_PATH
# Add MacPorts header file install dirs to your gcc and g++ include paths
export C_INCLUDE_PATH=/opt/local/include:$C_INCLUDE_PATH
export CPLUS_INCLUDE_PATH=/opt/local/include:$CPLUS_INCLUDE_PATH
OS X, CPU संगतता समस्या को लिनक्स से अलग तरीके से संभालता है।
64-बिट लिनक्स पर जहां आपको किसी भी कारण से 32-बिट का समर्थन करना पड़ता है, आप पुस्तकालयों जैसी चीजों की दो प्रतियों के साथ समाप्त होते हैं, जो दोनों प्रारूपों में होने की आवश्यकता होती है, एक lib64
निर्देशिका के समानांतर एक निर्देशिका में 64-बिट संस्करण बंद होते हैं। पारंपरिक lib
निर्देशिका।
यूनिवर्सल बाइनरी कॉन्सेप्ट के साथ OS X इस समस्या को अलग ढंग से हल करता है, जो आपको एक ही फाइल में कई बायनेरिज़ डालने की सुविधा देता है। वर्तमान में आपके पास 4 सीपीयू प्रकार: 32- और 64-बिट पावरपीसी, प्लस 32- और 64-बिट इंटेल का समर्थन करने वाले निष्पादन योग्य हो सकते हैं।
यूनिवर्सल बायनेरिज़ को Xcode के साथ बनाना आसान है, लेकिन कमांड लाइन टूल के साथ थोड़ा दर्द है। यह आपको ऑटोकैफ़-आधारित बिल्ड सिस्टम के साथ एक यूनिवर्सल इंटेल-बिल्ड बनाता है:
$ ./configure --disable-dependency-tracking CFLAGS='-arch i386 -arch x86_64' \
LDFLAGS='-arch i386 -arch x86_64'
जोड़े -arch ppc -arch ppc64
को CFLAGS
और LDFLAGS
आप PowerPC समर्थन की आवश्यकता है।
यदि आप निर्भरता ट्रैकिंग को अक्षम नहीं करते हैं, तो आप केवल एक प्लेटफ़ॉर्म के लिए निर्माण करते हैं, क्योंकि .o
पहले प्लेटफ़ॉर्म के लिए नव-निर्मित फ़ाइलों की उपस्थिति make(1)
यह आश्वस्त करती है कि इसे दूसरे प्लेटफ़ॉर्म के लिए भी बनाने की आवश्यकता नहीं है। उपरोक्त उदाहरण में दो बार सब कुछ बनाया जाना है; पूरी तरह से सार्वभौमिक बाइनरी के लिए चार बार, अगर आपको अभी भी पावरपीसी समर्थन की आवश्यकता है।
( Apple तकनीकी नोट TN2137 में अधिक जानकारी ।)
डेवलपर उपकरण डिफ़ॉल्ट रूप से OS X पर स्थापित नहीं हैं।
लायन से पहले, आपके सिस्टम के लिए सही देव उपकरण प्राप्त करने के लिए सबसे विश्वसनीय जगह ओएस डिस्क पर थी। वे एक वैकल्पिक स्थापित कर रहे हैं।
ओएस डिस्क से देव टूल्स को स्थापित करने के बारे में अच्छी बात यह है कि आपको पता है कि उपकरण ओएस के साथ काम करेंगे। Apple Apple होने के नाते, आपके पास नवीनतम संकलक को चलाने के लिए OS का एक हालिया संस्करण होना चाहिए, और उन्होंने हमेशा पुराने टूल के डाउनलोड उपलब्ध नहीं कराए हैं, इसलिए OS डिस्क अक्सर किसी दिए गए सही उपकरण को खोजने का सबसे आसान तरीका है देव या परीक्षण बॉक्स।
लायन के साथ, वे मीडिया स्थापित करने की कोशिश कर रहे हैं, इसलिए जब तक आप महंगे यूएसबी कुंजी संस्करण नहीं खरीदते हैं, आपको ऐप स्टोर से Xcode डाउनलोड करना होगा ।
मेरा सुझाव है कि आप अपने द्वारा डाउनलोड किए गए किसी भी Xcode DMG के कम से कम कुछ संस्करण रखें। जब लायन का उत्तराधिकारी एक या तीन साल के लिए बाहर आता है, तो हो सकता है कि आप लायन टेस्ट वीएम पर एक्सकोड के समकालीन संस्करण को स्थापित करने के तरीके के बिना खुद को पा सकें। ओएस मीडिया की उपलब्धता की समस्या और कमी के मामले में आगे की योजना बनाएं, पुराने संस्करणों को Xcode अन्यथा अप्राप्य बना दें।