Запустіть 64-розрядну програму в 32-бітній системі Ubuntu


10

Усі питання, які я бачив, стосуються запуску 32-розрядної програми в 64-бітній системі.

Я запускаю 32-розрядну Ubuntu 12.04 (фактично елементарну ОС Luna, яка заснована на ній), і я намагаюся запустити 64-розрядний додаток, який відмовляється відкрити. Запуск:

./64bit_app.run

(де 64bit_app.run64-розрядне додаток, яке я намагаюся запустити) призводить до:

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

що означає " неможливо виконати / запустити / відкрити бінарний файл ".

Чи повинен я мати можливість це запустити? Чи можливо запустити 64-розрядну програму в 32-бітній системі? Якщо так, то як?


Я не пробував цього, але чи намагалися ви, як показано тут , рішення, що пояснюються тут dpkg --add-architecture? Наскільки мені відомо, той самий підхід повинен працювати для 32 на 64 та для 64 на 32. Просто змініть dpkg --add-architecture i386на dpkg --add-architecture amd64.
terdon

1
ви робите 64-розрядний апаратне забезпечення, НЕ так? (просто для переконання)
strugee

"який відмовляється відкрити"? як саме?
Брайам

1
Прочитайте, будь ласка, відповіді на запитання, до якого я пов’язаний , потрібно запустити sudo dpkg --add-architecture amd64першим. Це окрема команда.
terdon

1
@terdon вибачте, я цього не зрозумів. Запуск цього рядка призводить до: dpkg: error: opción --add-architecture desconocidaкуди desconocidaперекладається unknown.
Габріель

Відповіді:


8

Ви не можете зробити це безпосередньо в Linux на x86_64 з 32-бітовим ядром. Вам потрібно 64-бітове ядро, щоб мати змогу запускати 64-бітовий код. (Примітка: ядро. Ви можете мати 32-бітну область користувача на 64-бітовому ядрі та встановити підтримку 64-бітових бінарних файлів. Наскільки це просто, залежить від розподілу. Приклад тут для Debian.)

Деяке програмне забезпечення для віртуалізації може це зробити (з обмеженням типу CPU, який ви використовуєте), і емулятори можуть це робити. Але для запуску програми вам знадобиться 64-бітове ядро.

Оскільки більшість 64-бітових дистрибутивів мають 32-бітну підтримку (як за замовчуванням, так і для встановлення), саме цим вам слід скористатися, якщо вам потрібно запустити і 64-бітні, і 32-бітні бінарні файли на одній ОС.


7

Розширення відповіді @ Mat:

Так, деякі програми для віртуалізації можуть це зробити. Основна перешкода для обробки полягає в тому, що в 32-бітному середовищі 64-розрядні функції CPU недоступні, а також функції 64-бітного ядра недоступні. Це навіть так, якщо у вашого процесора є 64-розрядна підтримка (приблизно з 2003 року - у всіх).

У вашому питанні неявно зазначено, що ви хочете запустити 64-розрядний додаток у власному системному середовищі. Якщо це дійсно ваш намір, це виключає всі віртуальні машинні рішення. Єдине, що мені відомо, - це емуляція ядра qemu. Тому:

qemu-x86_64 ./your_64bit_app

Він запускає ваш додаток у вашій поточній системі, у вашому поточному ядрі, зі змінними поточного середовища . Звичайно, це не дуже швидко, він повинен наслідувати ваш процесор.

Він може імітувати лише додатки linux x86-64.


Десь я також читав, нібито також vmware міг це зробити, але це недостатньо впевненої інформації для відповіді. Нещодавнє vmware Afaik працює лише на 64-бітній стороні.
петерх

1

Більшість 64-розрядних архітектур є розширеннями для 32-розрядних. Вони новіші та зовсім інші, тому 32-розрядна архітектура, очевидно, не має уявлення, що таке 64-бітний аналог. Вони не знають, що це за нові функції, які нові регістри є ... Навіть якщо вони знають, вони не мають доступу до нових регістрів і функцій. В результаті 32-бітове ядро ​​не може зберегти 64-бітні контексти. Все це робить неможливим запуск 64-бітних додатків у 32-бітній системі.

Ретельно продуманий 64-розрядний 32-розрядний ядро може запускати 64-розрядні програми, але для заощадження контексту все ще потрібен 64-бітний код, завдяки чому він вже не є чистим 32-бітним ядром.

Ви можете запустити 64-бітну ОС в емуляторі або 64-бітну гостьову віртуальну машину всередині 32-бітного хоста з VT-x. Але технічно ви працюєте в іншій 64-бітній системі. Ще не можливо запустити 64-розрядний код безпосередньо на 32-бітному Linux ядрі

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.