2010-05-27 12 views
24

जब मैं कंपाइलर ध्वज -mmacosx-version-min=10.5 पास करता हूं, तो इसका क्या अर्थ है? मुझे लगता है कि इसका मतलब है कि परिणाम बाइनरी x86 है, पीपीसी नहीं, लेकिन क्या यह 32 बिट्स या 64 बिट्स है? मैं बर्फ तेंदुए पर संकलन कर रहा हूं, इसलिए डिफ़ॉल्ट आउटपुट बाइनरी 64 बिट्स है। मैं -universal पास नहीं कर रहा हूं, यह 32 बिट -64 बिट सार्वभौमिक बाइनरी नहीं है, मुझे लगता है।मैकॉक्स-वर्जन-मिनट क्या इंगित करता है?

उत्तर

19

यह विकल्प हेडर में रखे गए विभिन्न उपलब्धता मैक्रोज़ द्वारा उपयोग किया जाएगा। इसका मतलब है कि आपको ओएस के न्यूनतम संस्करण की आवश्यकता हो सकती है, भले ही आपके पास हालिया एसडीके हो (यानी 10.6 एसडीके के साथ लक्ष्य 10.5)। 10.5 को लक्षित करते समय 10.6 एपीआई का उपयोग करना एक चेतावनी ट्रिगर करेगा और एपीआई को कमजोर_इम्पोर्ट विशेषता से जोड़ा जाएगा।

अधिकांश एप्पल के एपीआई हेडर प्रत्येक वर्ग, विधि, कार्य या enumerations के लिए उपलब्धता मैक्रो शामिल क्रम में उनमें से प्रत्येक के लिए घोषित करने के लिए:

  • न्यूनतम OS समर्थित
  • प्रतिवाद
  • अनुपलब्धता
  • ...

मैक्रो की तरह लग रहे:

  • AVAILABLE_MAC_OS_X_VERSION_10_2_AND_LATER
  • AVAILABLE_MAC_OS_X_VERSION_10_2_AND_LATER_BUT_DEPRECATED
  • ...

वास्तुकला का सवाल है, यह केवल SDK के बाइनरी में उपलब्ध आर्किटेक्चर पर निर्भर करता है। उदाहरण के लिए 10.5 एसडीके के साथ, आप चार आर्किटेक्चर (इंटेल/32 बिट्स, पावरपीसी/32 बिट्स, इंटेल/64 बिट्स, पावरपीसी 64 बिट्स) को लक्षित कर सकते हैं, जबकि 10.6 एसडीके के साथ, आप केवल तीन आर्किटेक्चर (इंटेल/32 बिट्स, पावरपीसी/32 बिट्स, इंटेल/64bits)।

आप Snow Leopard उपयोग कर रहे हैं के रूप में, आप कर सकते हैं या तो लक्ष्य i386 (इंटेल/32bits), पीपीसी (PowerPC/32bits) या x86_64 (इंटेल/64bits) बहुत आसानी से इस तरह एक वास्तुकला विकल्प पास करके:

gcc -arch i386 

या इस तरह (के लिए कॉन्फ़िगर आधारित परियोजनाओं):

CFLAGS="-arch i386" LDFLAGS="-arch i386" ./configure 
+0

मुझे इन मैक्रोज़ को सादे सी में प्राप्त करने के लिए शामिल करना था। लेकिन उपलब्ध.h को stdlib.h –

+1

में भी शामिल किया गया है, नीचे @ क्रिस्टियन का उत्तर भी देखें। इसके अलावा मैंने पाया है कि न्यूनतम संस्करण 10 से ऊपर और ऊपर है।8 थोड़ा अलग प्रतीकों उत्पन्न करेगा ('_start' प्रतीक का लिंक बदल गया है, संभवतः नई डिफ़ॉल्ट सी ++ लाइब्रेरी के अनुरूप)। वास्तव में – Ephemera

4

यह मैक ओएस एक्स 10.5 के बाद दिखाई देने वाली विधियों के लिए कंपाइलर चेतावनियों को ट्रिगर करता है। वास्तुकला के साथ कुछ भी नहीं है।

10

मेरे परीक्षण से, यह भी महत्वपूर्ण है कि इस विकल्प का लिंक कदम (-arch) की तरह करने के लिए पारित किया जा है, इसलिए यह मैक्रोज़/प्रीप्रोकैसिंग को प्रभावित करने से अधिक करता है (जैसा कि अन्य उत्तरों से अनुमानित किया जा सकता है)।

चरण संकलित करने के लिए पारित होने पर, लिंक चरण पर पारित नहीं हुआ, मैंने पाया कि 10.6 के साथ निर्मित साझा पुस्तकालय 10.5 के तहत लोड नहीं होंगे।

12

-mmacosx-version-min=... सी ++ एसटीएल कार्यान्वयन (जीएनयू या एलएलवीएम) की डिफ़ॉल्ट पसंद को भी प्रभावित करता है, और इस संबंध में, यह संकलक और लिंकर के लिए भी उतना ही महत्वपूर्ण है।

+3

। यह मैवरिक्स पर विशेष रूप से महत्वपूर्ण है, जहां डिफ़ॉल्ट सी ++ एसटीएल lib बदल गया। –

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