Làm cách nào tôi có thể chạy ứng dụng 32 bit trên OSX 10.7.2 64 bit?


15

Tôi có một ứng dụng chỉ tồn tại phiên bản 32 bit. Để sử dụng nó, tôi đã từng nhấn 2& 3cùng nhau trước khi khởi động máy Mac, vì vậy nó sẽ chạy ở chế độ 32 bit. Tuy nhiên, một số ứng dụng (phiên bản 64 bit đã cài đặt trước đó) sẽ luôn bị sập trong chế độ này ..

Tôi tình cờ thấy một giải pháp chạy ứng dụng 32 bit trong hệ thống 64 bit:

arch -i386 theApp.app

Nhưng tôi đã thử với arch: /Applications/theApp.app isn't executablelỗi. Tôi đã kiểm tra sự cho phép tập tin và nó hiển thị drwxrwxr-x, nó sẽ được thực thi, uh?
EDIT : Như @ gd1 đã nói, theApp.app là một thư mục (tôi gọi là gói trong OSX tôi nghĩ) và vì vậy nó không thể thực thi được.

Nhưng tôi vẫn cần một cách giải quyết:
Làm cách nào để chạy ứng dụng 32 bit trong hệ thống 64 bit của mình một cách chính xác?


EDIT : Bây giờ tôi có thể mở ứng dụng bằng archlệnh (cảm ơn @GordonDavisson):

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

Tuy nhiên, ứng dụng chạy có Components lostlỗi, nhật ký hiển thị bên dưới:

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(tôi ghét nó !! Nhưng tôi cần nó ..) được sử dụng để kết nối với mạng trong trường đại học của tôi tại Trung Quốc.


CHỈNH SỬA :

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

Có vẻ như nó chỉ có 32 bit và phụ thuộc vào kernel 32 bit. Ôi, tôi buồn quá. :


Đây là một số thông tin tôi nhận được với sự giúp đỡ từ @GordonDavisson, có lẽ ai đó cần nó.

Các DOC chương trình một số phương pháp để tạm thời khởi động với kernel 32-bit để sử dụng phần mở rộng hạt nhân cũ cho phần mềm hoặc phần cứng của bên thứ ba.

Và đó là về "Khả năng tương thích với kernel 64 bit" :

Phần mềm của bên thứ ba (như công cụ ảo hóa) hoặc phần cứng (như thẻ PCIe) dựa trên phần mở rộng kernel tương thích với Mac OS X Server v10.5 có thể không hoạt động trên máy Mac sử dụng kernel 64 bit trong Mac OS X v10.6. Liên hệ với nhà cung cấp phần mềm hoặc phần cứng để biết phần mở rộng kernel được cập nhật hoạt động với kernel 64 bit trong Mac OS X Server v10.6.

Như một giải pháp thay thế, bạn có thể tạm thời khởi động với kernel 32 bit để sử dụng các phần mở rộng kernel cũ hơn cho phần mềm hoặc phần cứng của bên thứ ba.


Phiên bản nào của OS X?
skub

@skub 10.7.2. :)
Kjuly

1
Tôi không biết rõ về OSX, nhưng tôi cho rằng "arch" hy vọng một tệp thực thi sẽ được đưa ra làm đối số và App.app là một thư mục (như bạn có thể thấy, nó có chữ 'd' ở phía trước bắt đầu chuỗi quyền). Serach cho thực thi bên trong nó, tôi tin trong "Nội dung> MacOS"
gd1

@ gd1 ya, bạn nói đúng! Bây giờ tôi tự hỏi làm thế nào để chạy nó trong chế độ 32 bit. :)
Kjuly

Câu trả lời:


19

OS X không có chế độ tổng thể 64/32 bit; nó chạy các chương trình riêng lẻ ở bất kỳ chế độ nào có vẻ "tốt nhất" khi chúng bắt đầu. Giữ 32khi khởi động máy tính sẽ làm cho kernel của nó chạy ở chế độ 32 bit, nhưng điều này không liên quan gì đến các chương trình chế độ chạy trong. OS X có thể vui vẻ chạy các chương trình ở chế độ 32 bit trong kernel 64 bit hoặc các chương trình ở chế độ 64 bit dưới nhân 32 bit.

Nếu chương trình của bạn chỉ bao gồm mã 32 bit, nó sẽ chạy ở chế độ 32 bit mà bạn không phải làm gì đặc biệt. Bạn có thể kiểm tra điều này bằng cách chạy filelệnh trên tệp thực thi (thường là trong AppName.app/Contents/MacOS/AppName. Dưới đây là một vài ví dụ:

$ 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

... cho tôi biết rằng Chess.app bao gồm mã Intel 32 bit và 64 bit ("i386" và "x86_64", tương ứng), VLC.app bao gồm Intel 32 bit và PowerPC 32 bit ("ppc") mã và Adobe Reader chỉ bao gồm mã Intel 32 bit.

Bạn cũng có thể nhận được một số thông tin này (mặc dù không chi tiết rõ ràng) từ báo cáo hệ thống của Thông tin hệ thống (trong phần Phần mềm -> Ứng dụng).

Nếu một ứng dụng có cả mã 32 và 64 bit, bạn có thể chọn sử dụng cái nào trong cửa sổ Tìm kiếm thông tin cho ứng dụng (sẽ có hộp kiểm "Mở ở chế độ 32 bit") hoặc bằng cách sử dụng archlệnh trên thực thi (ví dụ arch -i386 /Applications/theApp.app/Contents/MacOS/theApp). Nhưng thông thường bạn không cần phải làm điều này, HĐH thực hiện tốt việc chọn chế độ tốt nhất.

(Một trường hợp bạn cần ghi đè thủ công lựa chọn chế độ là để tương thích với plugin hoặc thư viện. Nếu bạn có ứng dụng 32 & 64 bit, nhưng nó cần có thể tải một plugin hoặc thư viện chỉ 32 bit, bạn sẽ có để buộc chương trình chạy ở chế độ 32 bit.)

Nếu bạn có các chương trình 64 bit sẽ không chạy ngay trong kernel 32 bit, thì chúng có một số lỗi lạ hoặc có điều gì đó thậm chí còn lạ. Nếu bạn cung cấp các chi tiết cụ thể, chúng tôi có thể tìm ra điều gì thực sự sai.

EDIT: Có vẻ như ứng dụng chỉ có 32 bit và cài đặt phần mở rộng kernel chỉ 32 bit (kext). Mặc dù phần ứng dụng 32 bit có thể chạy trong bất kỳ chế độ kernel nào, nhưng kexts 32 bit chỉ có thể tải vào kernel 32 bit (nó giống như một plugin cho kernel). Bạn có thể chạy kernel ở chế độ 32 bit bằng cách giữ 32khởi động hoặc vĩnh viễn bằng lệnh sudo systemsetup -setkernelbootarchitecture i386(xem KB # HT3773 của Apple ).

Lưu ý rằng không cần thiết phải làm gì đặc biệt để mở ứng dụng ở chế độ 32 bit; vì đó là định dạng duy nhất được bao gồm, nó sẽ chạy trong chế độ đó bất kể nó được khởi chạy như thế nào (đặc biệt, archlệnh không cần thiết).

Nếu bạn có bất kỳ ứng dụng 64 bit nào không chạy đúng trong kernel 32 bit, đó là một vấn đề riêng biệt và tôi khuyên bạn nên đăng một câu hỏi khác về điều đó.


"One instance where you would need to manually override the mode selection is for plugin or library compatibility"đây có thể là trường hợp tôi chỉ cần chạy ứng dụng của mình ở chế độ 32 bit. Chương trình luôn bị sập là MS Word(tôi sử dụng LaTeX thay thế ngay bây giờ), tôi không chắc liệu chế độ 32 bit có gây ra sự cố hay không, chỉ là phỏng đoán cá nhân. Và arch -i386 /Applications/theApp.app/Contents/MacOS/theApplà những gì tôi muốn! Tôi sẽ thử sau đó! Cảm ơn!! : D
Kjuly

Thật không may, nó đã thất bại với Components lostlỗi. :( Tôi dán nhật ký vào Q. Cảm ơn trước!
Kjuly

1
Nhật ký đó biểu thị rằng nó đang cố tải một phần mở rộng kernel (.kext), điều đó có nghĩa là chế độ kernel vấn đề (về cơ bản giống như plugin kernel) và bit "kiến trúc được yêu cầu / không thể thực thi" cho thấy nó không hỗ trợ chế độ mà kernel đang chạy. Đầu tiên, tôi sẽ tìm hiểu các chế độ mà kext có với một cái gì đó như file /tmp/xlpppoe.kext/Contents/MacOS/xlpppoe(hoặc nó có thể ở /Appluggest/Èó È.app/xlpppoe.kext thay thế). Nếu chỉ có 32 bit, bạn sẽ cần khởi động kernel ở chế độ 32 bit (xem tại đây ).
Gordon Davisson

Xin chào @Gordon, tôi đặt thông tin cho câu hỏi của tôi. Có lẽ bạn có thể sử dụng phần cuối cùng của tôi như là một phần của câu trả lời của bạn. : p Dù sao cũng cảm ơn !!
Kjuly
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.