Запустите 64-разрядное приложение в 32-разрядной системе Ubuntu

попробуйте это, это использует только xdotool, но его версия - по крайней мере "2.20110530.1"

xdotool getmouselocation --shell | grep WINDOW

для получения идентификатора окна непосредственно, можно использовать это:

sedGetValue='s/.*=\(.*\)/\1/'
windowId=`xdotool getmouselocation --shell 2>/dev/null |grep WINDOW |sed "$sedGetValue"`
echo $windowId
9
31.10.2019, 18:19
3 ответа

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

Некоторые программы виртуализации может это делать (с ограничениями на тип используемого вами процессора), и эмуляторы тоже могут это делать. Но для запуска вам понадобится 64-битное ядро.

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

8
27.01.2020, 20:05

Расширяя ответ @Mat:

Да, некоторые программы виртуализации могут это сделать. Основным препятствием для работы является то, что в 32-битной среде недоступны 64-битные возможности процессора, а также возможности 64-битного ядра. Это даже так, если ваш процессор имеет поддержку 64-бит (примерно с 2003 года все они имеют).

Ваш вопрос неявно указывает на то, что вы хотите запустить 64-битное приложение в своем собственном системном окружении. Если это действительно ваше намерение, то это исключает все решения на базе виртуальных машин. Единственное известное мне решение - это эмуляция ядра qemu. Итак:

qemu-x86_64 ./your_64bit_app

Он запускает ваше приложениена вашей текущей системе, с вашим текущим ядром, с вашими текущими переменными окружения. Конечно, он не очень быстрый, ему приходится эмулировать ваш процессор.

Он может эмулировать только приложения linux x86-64.

7
27.01.2020, 20:05

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

Тщательно созданное 32-битное ядро ​​с поддержкой 64-битных систем может запускать 64-битные приложения, но для сохранения контекста ему по-прежнему требуется 64-битный код, что делает его не чистым 32-битным ядром. бит ядра больше.

Вы можете запустить 64-битную ОС внутри эмулятора или 64-битную гостевую виртуальную машину внутри 32-битного хоста с помощью VT-x. Но технически вы работаете в другой 64-битной системе. По-прежнему невозможно запускать 64-разрядный код непосредственно на 32-разрядном ядре Linux

.
1
27.01.2020, 20:05

Теги

Похожие вопросы