2010-07-28 9 views
14

यह एक बहुत ही मूर्ख सवाल हो सकता है, लेकिन मै मैक पर विकास करने के लिए नया हूं और सार्वभौमिक बाइनरी के साथ कठिन समय ले रहा हूं।मैक ओएस एक्स पर सार्वभौमिक पुस्तकालयों को संकलित कैसे करें?

मेरे पास एक ऐसा एप्लिकेशन है जिसे मैं क्यूटी निर्माता में संकलित कर रहा हूं, जो लिपो के अनुसार i386 आर्किटेक्चर आउटपुट का उत्पादन कर रहा है। जैसा कि मैं इसे समझता हूं, इसका मतलब है कि यह मैक ओएस एक्स 32 बिट आउटपुट का उत्पादन कर रहा है।

एप्लिकेशन दो बाहरी पुस्तकालयों पर निर्भर करता है। इन पुस्तकालयों में से एक मैं पहले ./config को कॉल करके संकलित कर रहा हूं, और फिर बना हूं। ./config बताता है कि यह "डार्विन-आई 386-सीसी के लिए कॉन्फ़िगर किया गया है"। हालांकि, परिणाम बनाने के बाद, और परिणामस्वरूप लिपो को कॉल करने के बाद, आर्किटेक्चर को x86_64 के रूप में रिपोर्ट किया जाता है।

इसी प्रकार, मेरे पास एक और बाहरी पुस्तकालय है। उसमें कोई कॉन्फ़िगर स्क्रिप्ट नहीं है, और मैं इसे कॉल करके बस संकलित करता हूं। इस से भी आउटपुट x86_64 है।

मैं इन दो बाहरी पुस्तकालयों को कैसे संकलित कर सकता हूं ताकि वे मेरे आवेदन के i386 आउटपुट के साथ कुछ संगत हो सकें? बेहतर अभी तक, मैं इन दो बाहरी पुस्तकालयों को सार्वभौमिक पुस्तकालयों का उत्पादन करने के लिए कैसे संकलित कर सकता हूं ताकि मैं अपने आवेदन से सार्वभौमिक बाइनरी उत्पन्न कर सकूं जो 32 और 64 बिट दोनों पर काम करता है?

इसके अलावा, मैक दुनिया की वर्तमान स्थिति के आधार पर, क्या कोई अन्य प्लेटफार्म है कि मुझे उचित, उपयोगकर्ता के अनुकूल मैक ओएस एक्स सार्वभौमिक बाइनरी बनाने के लिए लक्षित करने की उम्मीद की जानी चाहिए?

उत्तर

13

अंत में यह काम कर रहा है।

लक्ष्य के आर्किटेक्चर को नियंत्रित करने के लिए, मैन्युअल रूप से मेकफ़ाइल में प्रवेश और संपादित किया गया।

उनमें से एक के लिए, मैंने सीएफएलजीएस के साथ शुरू होने वाली रेखा के अंत में जोड़ा: -arch i386 -arch x86_64 -arch ppc इसने एक सार्वभौमिक बाइनरी का उत्पादन किया।

दूसरी तरफ, जब मैंने वही किया, तो संकलन त्रुटि हो जाएगी। मुझे एक समय में एक कमान डालना पड़ा और केवल एक कमान डालना पड़ा, और उसके बाद मैंने तीनों का उत्पादन करने के बाद, मैंने सार्वभौमिक बाइनरी बनाने के लिए -क्रेट ध्वज के साथ लिपो को बुलाया।

+0

क्या आपको पता है कि यह आईओएस समर्थन जोड़ने के लिए भी काम करता है – tofutim

+0

एएचडी यह सार्वभौमिक पुस्तकालय क्या है, क्या यह सिर्फ सभी अलग-अलग संकलन एक साथ squashed है? क्या आप तब एक विशाल पुस्तकालय के साथ खत्म हो जाएगा? – tofutim

1

मैं आपके प्रश्न के मुख्य भाग का उत्तर नहीं दे सकता, क्योंकि मैं हमेशा बनाने के बजाय एक्सकोड का उपयोग करता हूं। लेकिन उस अंतिम भाग के लिए, यदि आप 10.6 से पहले ओएस संस्करणों का समर्थन करते हैं, तो आपको PowerPC (arch। Code "ppc") के साथ संकलन करने की आवश्यकता हो सकती है।

+0

क्या पावरपीसी ऐसा कुछ बनाता है जो मैक उपभोक्ता बाजार का एक महत्वपूर्ण हिस्सा अभी भी अपेक्षा करता है? तो सार्वभौमिक बाइनरी के लिए कुल 3 प्लेटफॉर्म की उम्मीद है? – Nantucket

+1

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

+1

एक और बात: जहां तक ​​मुझे पता है, "सार्वभौमिक बाइनरी" शब्द का अर्थ आमतौर पर i386 + ppc है, i386 + x86_64 नहीं। – JWWalker

7

कॉन्फ़िगर के लिए, तो आप इस का उपयोग कर सकते हैं:

कॉन्फ़िगर CFLAGS = "- मेहराब i386 -arch x86_64" CXXFLAGS = "- मेहराब i386 -arch x86_64" LDFLAGS = "- मेहराब i386 -arch x86_64 "- अक्षम-निर्भरता-ट्रैकिंग

- अक्षम-निर्भरता-ट्रैकिंग महत्वपूर्ण है या जीसीसी/जी ++ कोड संकलित करने से इंकार कर देगा।

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