ฉันจะรันแอพ 32 บิตบน OSX 10.7.2 64 บิตได้อย่างไร


15

ฉันมีแอพที่มีอยู่ในรุ่น 32 บิตเท่านั้น เพื่อที่จะใช้ฉันเคยกด2& 3ร่วมกันก่อนที่จะบูต Mac ดังนั้นมันจะทำงานในโหมด 32 บิต อย่างไรก็ตามแอพบางตัว (เวอร์ชั่น 64 บิตที่ติดตั้งมาก่อน) จะมีปัญหาในโหมดนี้เสมอ

ฉันบังเอิญเห็นวิธีแก้ปัญหาที่เรียกใช้แอพ 32 บิตในระบบ 64 บิต:

arch -i386 theApp.app

แต่ฉันลองarch: /Applications/theApp.app isn't executableผิดพลาด ฉันตรวจสอบการอนุญาตของไฟล์และมันแสดงdrwxrwxr-xว่ามันควรจะปฏิบัติได้ใช่มั้ย?
แก้ไข : ตามที่ @ gd1 กล่าวว่า theApp.app เป็นโฟลเดอร์ (เรียกว่าบันเดิลใน OSX ฉันคิดว่า) และดังนั้นจึงไม่สามารถใช้งานได้

แต่ฉันยังต้องการวิธีแก้ปัญหา:
ฉันจะเรียกใช้แอพ 32 บิตในระบบ 64 บิตได้อย่างถูกต้องได้อย่างไร


แก้ไข : ฉันสามารถเปิดแอพได้ด้วย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 บิต โอ้ฉันเสียใจมาก :(


นี่คือข้อมูลบางส่วนที่ฉันได้รับด้วยความช่วยเหลือจาก @GordonDavisson บางทีอาจมีคนอื่นต้องการ

DOCแสดงบางวิธีการที่จะเริ่มต้นชั่วคราวกับเคอร์เนล 32 บิตจะใช้ส่วนขยายเคอร์เนลรุ่นเก่าสำหรับซอฟแวร์หรือฮาร์ดแวร์ของบุคคลที่สาม

และมันเกี่ยวกับ"ความเข้ากันได้กับเคอร์เนล 64 บิต" :

ซอฟต์แวร์ของ บริษัท อื่น (เช่น virtualization engine) หรือฮาร์ดแวร์ (เช่นการ์ด PCIe) ที่ใช้ส่วนขยายเคอร์เนลซึ่งเข้ากันได้กับ Mac OS X Server v10.5 อาจไม่ทำงานบน Macs ที่ใช้เคอร์เนล 64 บิตใน Mac OS X v10.6 ติดต่อผู้จำหน่ายซอฟต์แวร์หรือฮาร์ดแวร์สำหรับส่วนขยายเคอร์เนลที่อัพเดตซึ่งทำงานกับเคอร์เนล 64 บิตใน Mac OS X Server v10.6

คุณสามารถเริ่มต้นใช้งานเคอร์เนลแบบ 32 บิตเป็นการชั่วคราวเพื่อใช้ส่วนขยายเคอร์เนลที่เก่ากว่าสำหรับซอฟต์แวร์หรือฮาร์ดแวร์ของ บริษัท อื่น


OS X รุ่นใด
skub

@skub 10.7.2 :)
Kjuly

1
ฉันไม่รู้จัก OSX เป็นอย่างดี แต่ฉันคิดว่า "arch" คาดว่าไฟล์ปฏิบัติการจะได้รับเป็นอาร์กิวเมนต์และ theApp.app เป็นโฟลเดอร์ (อย่างที่คุณเห็นมันมีตัวอักษร 'd' อยู่ข้างหน้า จุดเริ่มต้นของสตริงสิทธิ์) Serach สำหรับปฏิบัติการภายในฉันเชื่อว่าภายใต้ "เนื้อหา> MacOS"
gd1

@ gd1 ใช่คุณพูดถูก! ตอนนี้ฉันสงสัยว่าจะทำงานในโหมด 32 บิตได้อย่างไร :)
Kjuly

คำตอบ:


19

OS X ไม่มีโหมด 64/32 บิตโดยรวม มันรันแต่ละโปรแกรมในโหมดใดก็ตามที่ดูเหมือน "ดีที่สุด" เมื่อเริ่มต้น การถือครอง3และ2ในขณะที่คอมพิวเตอร์บู๊ตจะทำให้เคอร์เนลของมันทำงานในโหมด 32 บิต แต่สิ่งนี้ไม่เกี่ยวกับสิ่งที่เรียกใช้ในโหมดโปรแกรม OS X สามารถรันโปรแกรมอย่างมีความสุขในโหมด 32 บิตภายใต้เคอร์เนล 64 บิตหรือโปรแกรม ในโหมด 64 บิตภายใต้เคอร์เนล 32 บิต

หากโปรแกรมของคุณมีรหัส 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 ประกอบด้วยรหัส Intel 32- บิตและ 64- บิต ("i386" และ "x86_64" ตามลำดับ), VLC.app รวมถึง Intel 32 บิตและ PowerPC 32 บิต ("ppc") รหัสและ Adobe Reader มีเพียงรหัส Intel 32 บิต

คุณยังสามารถรับข้อมูลบางส่วนนี้ (แม้ว่าจะไม่ได้อยู่ในรายละเอียดที่ชัดเจน) จากรายงานระบบของข้อมูลระบบ (ในส่วนซอฟต์แวร์ -> แอปพลิเคชัน)

หากแอปมีทั้งรหัส 32- และ 64- บิตคุณสามารถเลือกอันที่จะใช้ในหน้าต่างค้นหาข้อมูลของแอพ (จะมีช่องทำเครื่องหมาย "เปิดในโหมด 32- บิต") หรือโดยการใช้archคำสั่งในการปฏิบัติการ (เช่นarch -i386 /Applications/theApp.app/Contents/MacOS/theApp) แต่โดยปกติคุณไม่จำเป็นต้องทำสิ่งนี้ระบบปฏิบัติการทำงานได้ดีในการเลือกโหมดที่ดีที่สุด

(หนึ่งอินสแตนซ์ที่คุณจะต้องแทนที่การเลือกโหมดด้วยตนเองนั้นมีไว้สำหรับปลั๊กอินหรือความเข้ากันได้กับไลบรารีถ้าคุณมีแอพ 32 และ 64 บิต แต่จำเป็นต้องโหลดปลั๊กอินหรือไลบรารี 32 บิตเท่านั้นคุณจะมี เพื่อบังคับให้โปรแกรมทำงานในโหมด 32 บิต)

หากคุณมีโปรแกรม 64- บิตที่จะไม่ทำงานภายใต้เคอร์เนล 32- บิตพวกเขาอาจมีข้อผิดพลาดแปลก ๆ หรือมีบางอย่างที่คนแปลกหน้าเกิดขึ้น หากคุณให้รายละเอียดที่เฉพาะเจาะจงเราอาจสามารถเข้าใจได้ว่าเกิดอะไรขึ้นจริง

แก้ไข: ดูเหมือนว่าแอพนั้นเป็นแบบ 32 บิตเท่านั้นและติดตั้งส่วนขยายเคอร์เนลแบบ 32 บิตเท่านั้น (kext) ในขณะที่ส่วนของแอป 32 บิตสามารถทำงานภายใต้โหมดเคอร์เนลใด ๆ ได้ แต่ Kexts แบบ 32 บิตสามารถโหลดลงในเคอร์เนลแบบ 32 บิตได้เท่านั้น (มันเหมือนกับปลั๊กอินสำหรับเคอร์เนล) คุณสามารถรันเคอร์เนลในโหมด 32 บิตโดยถือ3และ2เมื่อเริ่มต้นหรืออย่างถาวรด้วยคำสั่งsudo systemsetup -setkernelbootarchitecture i386(ดูKB KBของ Apple # 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เป็นสิ่งที่ฉันต้องการ! ฉันจะลองดู! ขอบคุณ !! : D
Kjuly

น่าเสียดายที่มันเกิดComponents lostข้อผิดพลาด :( ฉันวางบันทึกของฉันขอบคุณล่วงหน้า!
Kjuly

1
บันทึกที่บ่งชี้ว่ามันพยายามที่จะทำการโหลด kernel extension (.kext) ซึ่งหมายความว่าโหมดเคอร์เนลไม่ว่า (มันเป็นพื้นเช่นเคอร์เนลปลั๊กอิน) และ "สถาปัตยกรรมขอ / ปฏิบัติการไม่พบ" บิตแสดงให้เห็นว่ามันไม่สนับสนุน โหมดเคอร์เนลที่กำลังทำงานอยู่อันดับแรกฉันจะหาโหมดที่ kext มีกับสิ่งที่ต้องการfile /tmp/xlpppoe.kext/Contents/MacOS/xlpppoe(หรืออาจจะอยู่ใน/Applications/Èó-10ËÆØ.app/xlpppoe.kextแทน) หากเป็นแบบ 32 บิตเท่านั้นคุณจะต้องเริ่มเคอร์เนลในโหมด 32 บิต (ดูที่นี่ )
Gordon Davisson

สวัสดี @Gordon ฉันใส่ข้อมูลลงในคำถามของฉัน บางทีคุณสามารถใช้ส่วนสุดท้ายของฉันเป็นส่วนหนึ่งของคำตอบของคุณ : p ขอบคุณอยู่ดี !!
Kjuly
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.