Uruchom 64-bitową aplikację w 32-bitowym systemie Ubuntu


10

Wszystkie pytania, które widziałem, dotyczą uruchamiania 32-bitowej aplikacji w 64-bitowym systemie.

Korzystam z 32-bitowego systemu Ubuntu 12.04 (właściwie podstawowego systemu operacyjnego Luna, który jest na nim oparty) i próbuję uruchomić 64-bitową aplikację, która odmawia otwarcia. Bieganie:

./64bit_app.run

(gdzie 64bit_app.runjest 64-bitowa aplikacja, którą próbuję uruchomić) powoduje:

bash: ./64bit_app.run: no se puede ejecutar el fichero binario

co tłumaczy się jako „ nie można uruchomić / uruchomić / otworzyć pliku binarnego ”.

Czy powinienem móc go uruchomić? Czy można uruchomić 64-bitową aplikację w systemie 32-bitowym? Jeśli tak to jak?


Ja nie próbowałem, ale nie Chciałeœ przedstawiono rozwiązania tutaj , esoecially odpowiedź wyjaśniając dpkg --add-architecture? O ile mi wiadomo, to samo podejście powinno działać dla 32 na 64 i dla 64 na 32. Po prostu zmień dpkg --add-architecture i386na dpkg --add-architecture amd64.
terdon

1
Ci zrobić mieć 64-bitowy sprzęt, prawda? (dla pewności)
strugee

„który odmawia otwarcia”? jak dokładnie?
Braiam

1
Przeczytaj odpowiedzi na pytanie, z którym się łączyłem , musisz sudo dpkg --add-architecture amd64najpierw uruchomić . To osobne polecenie.
terdon

1
@terdon przepraszam, nie zrozumiałem tego. Uruchomienie tej linii powoduje: dpkg: error: opción --add-architecture desconocidagdzie desconocidatłumaczy unknown.
Gabriel

Odpowiedzi:


8

Nie możesz tego zrobić bezpośrednio w systemie Linux na x86_64 z jądrem 32-bitowym. Potrzebujesz 64-bitowego jądra, aby móc uruchomić 64-bitowy kod. (Uwaga: jądro. Możesz mieć 32-bitowy obszar użytkownika działający na 64-bitowym jądrze i zainstalować obsługę 64-bitowych plików binarnych. Jak łatwe jest to zależy od dystrybucji. Przykład tutaj dla Debiana.)

Niektóre oprogramowanie do wirtualizacji jest w stanie to zrobić (z ograniczeniami dotyczącymi rodzaju używanego procesora), a emulatory mogą to zrobić. Ale aby uruchomić go natywnie, potrzebujesz 64-bitowego jądra.

Ponieważ większość 64-bitowych dystrybucji ma obsługę 32-bitową (domyślnie lub instalowalną), z tego powinieneś korzystać, jeśli chcesz uruchomić zarówno binarne 64-bitowe, jak i 32-bitowe pliki w tym samym systemie operacyjnym.


7

Rozszerzając odpowiedź @ Mat:

Tak, niektóre oprogramowanie do wirtualizacji może to zrobić. Główną przeszkodą do rozwiązania jest to, że w środowisku 32-bitowym 64-bitowe funkcje procesora nie są dostępne, a także funkcje 64-bitowego jądra nie są dostępne. Dzieje się tak nawet wtedy, gdy twój procesor obsługuje 64-bit (od około 2003 roku wszystkie mają).

Twoje pytanie domyślnie wskazuje, że chcesz uruchomić 64-bitową aplikację we własnym środowisku systemowym. Jeśli tak naprawdę masz zamiar, wyklucza to wszystkie rozwiązania oparte na maszynach wirtualnych. Jedyne, co jest mi znane, to emulacja jądra qemu. Więc:

qemu-x86_64 ./your_64bit_app

Działa z aplikacją na bieżącym systemie, z bieżącym jądrem, z bieżącymi zmiennymi środowiskowymi . Oczywiście nie jest bardzo szybki, musi emulować procesor.

Może emulować tylko aplikacje Linux x86-64.


Gdzieś też przeczytałem, jakby vmware mogło to zrobić, ale to nie jest wystarczająca pewna informacja do odpowiedzi. Najnowsze vmware firmy Afaik są dostępne tylko po 64-bitach po stronie hosta.
peterh - Przywróć Monikę

1

Większość architektur 64-bitowych to rozszerzenia do wersji 32-bitowych. Są nowsze i zupełnie inne, więc architektura 32-bitowa nie ma pojęcia, czym jest 64-bitowy odpowiednik. Nie wiedzą, jakie są nowe funkcje, jakie są nowe rejestry ... Nawet jeśli wiedzą, nie mają dostępu do nowych rejestrów i funkcji. W rezultacie 32-bitowe jądro nie może zapisać 64-bitowych kontekstów. Wszystko to sprawia, że ​​uruchomienie 64-bitowych aplikacji w systemie 32-bitowym jest niemożliwe.

Starannie spreparowane 32-bitowe jądro z obsługą 64-bitów może uruchamiać 64-bitowe aplikacje, ale nadal potrzebuje 64-bitowego kodu, aby zaoszczędzić kontekst, co sprawia, że ​​nie jest już czystym 32-bitowym jądrem.

64-bitowy system operacyjny można uruchomić w emulatorze lub 64-bitową maszynę wirtualną gościa na 32-bitowym hoście za pomocą VT-x. Ale technicznie rzecz biorąc pracujesz w innym systemie 64-bitowym. Nadal nie jest możliwe uruchomienie 64-bitowego kodu bezpośrednio w 32-bitowym jądrze Linuksa

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.