मैं 64-बिट OSX 10.7.2 पर 32-बिट ऐप कैसे चला सकता हूं?


15

मेरे पास एक ऐप है जो केवल 32 बिट संस्करण में मौजूद है। इसका उपयोग करने के लिए, मैंने मैक को बूट करने से पहले एक साथ दबाया 2और इस्तेमाल किया 3, इसलिए यह 32 बिट मोड में चलेगा। हालाँकि, कुछ ऐप्स (64 बिट संस्करण जो पहले इंस्टॉल किए गए थे) इस मोड में हमेशा क्रैश होंगे।

मैं एक समाधान को देखने के लिए हुआ जो 64 बिट सिस्टम में 32 बिट ऐप चलाता है:

arch -i386 theApp.app

लेकिन मैंने arch: /Applications/theApp.app isn't executableत्रुटि के साथ कोशिश की । मैंने फ़ाइल अनुमति की जाँच की और यह दिखाया drwxrwxr-x, यह निष्पादन योग्य होना चाहिए, उह?
संपादित करें : जैसा कि @ gd1 ने कहा, TheApp.app एक फ़ोल्डर है (इसे OSX में बंडल कहा जाता है मुझे लगता है) और इसलिए यह निष्पादन योग्य नहीं है।

लेकिन मुझे अभी भी वर्कअराउंड की आवश्यकता है:
मैं अपने 64-बिट सिस्टम में अपने 32-बिट ऐप को सही तरीके से कैसे चला सकता हूं?


संपादित करें : मैं archअब कमांड के साथ एप्लिकेशन को खोल सकता हूं (धन्यवाद @GordonDavisson):

arch -i386 /Applications/theApp.app/Contents/MacOS/theApp

हालाँकि, एप्लिकेशन Components lostत्रुटि के साथ चलता है , नीचे दिखाया गया लॉग:

Kjuly@MacBook-Pro:/Applications$ arch -i386 闪讯.app/Contents/MacOS/闪讯 
2012-01-08 16:17:53.381 闪讯[472:1107] isActive: ioctl to kernel socket error 2 ,No such file or directory
2012-01-08 16:17:53.436 闪讯[472:1107] The AppPath = /Applications/闪讯.app
2012-01-08 16:17:53.437 闪讯[472:1107] The src path = /Applications/Èó™ËÆØ.app/xlpppoe.kext
2012-01-08 16:17:58.892 闪讯[472:1107] Set Driver Ok...
/tmp/xlpppoe.kext failed to load - (libkern/kext) requested architecture/executable not found; check the system/kernel logs for errors or try kextutil(8).

BTW, 闪讯.app(मुझे इससे नफरत है !! !! लेकिन मुझे इसकी आवश्यकता है ..) का उपयोग चीन में मेरे विश्वविद्यालय में नेटवर्क से जुड़ने के लिए किया जाता है।


संपादित करें :

Kjuly@MacBook-Pro:~$ file /Applications/闪讯.app/Contents/MacOS/闪讯
/Applications/闪讯.app/Contents/MacOS/闪讯: Mach-O executable i386

तथा

Kjuly@MacBook-Pro:~$ file /Applications/闪讯.app/xlpppoe.kext/Contents/MacOS/xlpppoe
/Applications/闪讯.app/xlpppoe.kext/Contents/MacOS/xlpppoe: Mach-O object i386

ऐसा लगता है कि यह केवल 32-बिट है और 32-बिट कर्नेल पर निर्भर करता है। ओह, मैं बहुत दुखी हूँ। :(


यहाँ कुछ infos हैं जो मुझे @GordonDavisson की मदद से मिले हैं, शायद किसी और को इसकी आवश्यकता है।

डॉक्टर से पता चलता है अस्थायी रूप से करने के लिए कुछ तरीकों 32-बिट कर्नेल के साथ शुरू तीसरे पक्ष के सॉफ्टवेयर या हार्डवेयर के लिए पुराने कर्नेल एक्सटेंशन का उपयोग करने के लिए।

और यह "64-बिट कर्नेल के साथ संगतता" के बारे में है :

तृतीय-पक्ष सॉफ़्टवेयर (जैसे वर्चुअलाइज़ेशन इंजन) या हार्डवेयर (जैसे PCIe कार्ड) जो कर्नेल एक्सटेंशन पर निर्भर करता है जो Mac OS X Server v10.5 के साथ संगत था, मैक पर काम नहीं कर सकता है जो 64-बिट कर्नेल का उपयोग करता है मैक ओएस एक्स v10.6। एक अद्यतन कर्नेल एक्सटेंशन के लिए सॉफ़्टवेयर या हार्डवेयर विक्रेता से संपर्क करें जो मैक ओएस एक्स सर्वर v10.6 में 64-बिट कर्नेल के साथ काम करता है।

वर्कअराउंड के रूप में, आप अपने तृतीय-पक्ष सॉफ़्टवेयर या हार्डवेयर के लिए पुराने कर्नेल एक्सटेंशन का उपयोग करने के लिए 32-बिट कर्नेल के साथ अस्थायी रूप से शुरू कर सकते हैं।


ओएस एक्स का क्या संस्करण?
स्केब

@ भास्कर 10.7.2। :)
काजुल

1
मैं OSX को बहुत अच्छी तरह से नहीं जानता, लेकिन मुझे लगता है कि "आर्क" एक निष्पादन के लिए एक तर्क के रूप में दिए जाने की अपेक्षा करता है, और TheApp.app एक फ़ोल्डर है (जैसा कि आप देख सकते हैं, इसमें सामने 'd' अक्षर है अनुमतियाँ स्ट्रिंग की शुरुआत)। इसके अंदर निष्पादन योग्य के लिए सेवा करें , मुझे "सामग्री> MacOS" के तहत विश्वास है
gd1

@ gd1 फिर, आप सही कह रहे हैं! अब मुझे आश्चर्य है कि इसे 32-बिट मोड में कैसे चलाया जाए। :)
काजुल

जवाबों:


19

OS X में समग्र 64/32 बिट मोड नहीं है; जब भी वे शुरू होते हैं तो यह किसी भी मोड में व्यक्तिगत कार्यक्रम चलाता है। होल्डिंग 3और 2कंप्यूटर बूट के रूप में इसकी कर्नेल को 32-बिट मोड में चलाया जाएगा, लेकिन इससे कोई लेना-देना नहीं है कि कौन से मोड प्रोग्राम चलते हैं, OS X 64-कर्नेल या प्रोग्राम के तहत 32-बिट मोड में प्रोग्राम को खुशी से चला सकता है। 32-बिट कर्नेल के तहत 64-बिट मोड में।

यदि आपके प्रोग्राम में केवल 32-बिट कोड शामिल है, तो यह 32-बिट मोड में चलेगा, जबकि आपके पास कुछ विशेष करने के लिए नहीं होगा। आप इसे fileनिष्पादन योग्य (आमतौर पर AppName.app/Contents/MacOS/AppName पर कमांड चलाकर देख सकते हैं। यहां कुछ उदाहरण दिए गए हैं:

$ file /Applications/Chess.app/Contents/MacOS/Chess
/Applications/Chess.app/Contents/MacOS/Chess: Mach-O universal binary with 2 architectures
/Applications/Chess.app/Contents/MacOS/Chess (for architecture x86_64): Mach-O 64-bit executable x86_64
/Applications/Chess.app/Contents/MacOS/Chess (for architecture i386):   Mach-O executable i386
$ file /Applications/VLC.app/Contents/MacOS/VLC
/Applications/VLC.app/Contents/MacOS/VLC: Mach-O universal binary with 2 architectures
/Applications/VLC.app/Contents/MacOS/VLC (for architecture i386):   Mach-O executable i386
/Applications/VLC.app/Contents/MacOS/VLC (for architecture ppc):    Mach-O executable ppc
$ file /Applications/Adobe\ Reader\ 9/Adobe\ Reader.app/Contents/MacOS/AdobeReader 
/Applications/Adobe Reader 9/Adobe Reader.app/Contents/MacOS/AdobeReader: Mach-O executable i386

... जो मुझे बताता है कि Chess.app में 32-बिट और 64-बिट इंटेल कोड ("i386" और "x86_64" क्रमशः) शामिल हैं, VLC.app में 32-बिट इंटेल और 32-बिट पावरपीसी ("पीपीसी") शामिल हैं कोड, और Adobe Reader में केवल 32-बिट इंटेल कोड शामिल है।

आप इस जानकारी की कुछ जानकारी (हालांकि स्पष्ट विवरण के अनुसार नहीं) सिस्टम सूचना प्रणाली की रिपोर्ट (सॉफ़्टवेयर -> एप्लिकेशन अनुभाग) से प्राप्त कर सकते हैं।

यदि किसी ऐप में 32- और 64-बिट दोनों कोड हैं, तो आप ऐप के लिए फाइंडर गेट इंफो विंडो में उपयोग कर सकते हैं (जिसमें "32-बिट मोड में ओपन" चेकबॉक्स होगा), या उपयोग करके archनिष्पादन योग्य (जैसे arch -i386 /Applications/theApp.app/Contents/MacOS/theApp) पर कमांड । लेकिन आपको सामान्य रूप से ऐसा करने की आवश्यकता नहीं है, ओएस सबसे अच्छा मोड चुनने का एक अच्छा काम करता है।

(एक उदाहरण जहां आपको मैन्युअल रूप से ओवरराइड करने की आवश्यकता होगी चयन प्लगइन या लाइब्रेरी संगतता के लिए है। यदि आपके पास 32 और 64-बिट ऐप है, लेकिन इसे 32-बिट केवल प्लगइन या लाइब्रेरी लोड करने में सक्षम होने की आवश्यकता है, तो आपके पास होगा कार्यक्रम को 32-बिट मोड में चलाने के लिए मजबूर करना।)

यदि आपके पास 64-बिट प्रोग्राम हैं जो एक 32-बिट कर्नेल के नीचे सही नहीं चलेंगे, तो उनके पास या तो किसी प्रकार के अजीब बग हैं, या कुछ अजनबी भी चल रहा है। यदि आप विशिष्ट विवरण देते हैं, तो हम यह पता लगाने में सक्षम हो सकते हैं कि वास्तव में क्या गलत हो रहा है।

EDIT: ऐसा लगता है कि ऐप केवल 32-बिट का है, और 32-बिट केवल कर्नेल एक्सटेंशन (kext) स्थापित करता है। जबकि 32-बिट ऐप का हिस्सा किसी भी कर्नेल मोड के तहत चल सकता है, 32-बिट kexts केवल 32-बिट कर्नेल में लोड हो सकता है (यह कर्नेल के लिए एक प्लगइन की तरह है)। आप कर्नेल को 32-बिट मोड में होल्ड करके 3और 2स्टार्टअप पर या स्थायी रूप से कमांड के साथ चला सकते हैं sudo systemsetup -setkernelbootarchitecture i386(Apple के KB # HT3773 देखें )।

ध्यान दें कि 32-बिट मोड में ऐप को खोलने के लिए कुछ विशेष करना आवश्यक नहीं होना चाहिए; चूंकि यह एकमात्र प्रारूप शामिल है, इसलिए यह उस मोड में चलेगा, भले ही यह कैसे लॉन्च किया गया हो (विशेष रूप से, archकमांड आवश्यक नहीं है)।

यदि आपके पास 64-बिट ऐप्स हैं जो 32-बिट कर्नेल के तहत ठीक से नहीं चलते हैं, तो यह एक अलग मुद्दा है और मैं इसके बारे में एक और प्रश्न पोस्ट करने की सलाह दूंगा।


"One instance where you would need to manually override the mode selection is for plugin or library compatibility"ऐसा हो सकता है कि मुझे अपना ऐप केवल 32-बिट मोड में चलाने की आवश्यकता हो। जो प्रोग्राम हमेशा क्रैश होता है MS Word(मैं अब इसकी जगह LaTeX का उपयोग करता हूं), मुझे यकीन नहीं है कि 32-बिट मोड क्रैश का कारण बनता है या नहीं, सिर्फ एक व्यक्तिगत अनुमान। और arch -i386 /Applications/theApp.app/Contents/MacOS/theAppमुझे क्या चाहिए! मेरे पास एक कोशिश होगी! धन्यवाद!! : डी
किजुल

दुर्भाग्य से, यह Components lostत्रुटि के साथ विफल रहा । :( मैं अपने प्रश्न के लिए लॉग पेस्ट करता हूं। अग्रिम धन्यवाद!
किजुल

1
यह लॉग इंगित करता है कि यह कर्नेल एक्सटेंशन (.xtxt) को लोड करने का प्रयास कर रहा है, जिसका अर्थ है कि कर्नेल मोड कोई फर्क नहीं पड़ता (यह मूल रूप से कर्नेल प्लगइन की तरह है), और "अनुरोधित वास्तुकला / निष्पादन योग्य नहीं मिला" बिट यह समर्थन नहीं करता है। कर्नेल मोड में चल रहा है। सबसे पहले, मुझे पता चलेगा कि kext के पास क्या मोड्स हैं जैसे file /tmp/xlpppoe.kext/Contents/MacOS/xlpppoe(या यह /Applications/AppólicËÆØ.app/xlpppoe.kext में हो सकता है)। यदि यह केवल 32-बिट है, तो आपको 32-बिट मोड में कर्नेल शुरू करने की आवश्यकता होगी ( यहां देखें )।
गॉर्डन डेविसन 18

हाय @Gordon, मैं अपने प्रश्न के लिए जानकारी डाल दिया। हो सकता है कि आप अपने जवाब के हिस्से के रूप में मेरे आखिरी हिस्से का उपयोग कर सकें। : पी वैसे भी धन्यवाद !!
काजुल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.