http://baalexxx.livejournal.com/ ([identity profile] baalexxx.livejournal.com) wrote in [community profile] useless_faq2005-08-09 12:01 am

(no subject)

Можно ли создать экзешник, который запускается и в Windows, и в Linux?

[identity profile] winwolf.livejournal.com 2005-08-08 09:04 pm (UTC)(link)
Многие виндовые программы можно запустить в Linux при помощи всякого рода программ-жмуляторов. Так что можно :)

[identity profile] netp-npokon.livejournal.com 2005-08-08 09:08 pm (UTC)(link)
В общем случае нет - из-за разной архитектуры систем. В отдельных случаях, как написал [livejournal.com profile] winwolf, возможна эмуляция Windows под Linux или наоборот.

[identity profile] asyatka.livejournal.com 2005-08-08 09:13 pm (UTC)(link)
Можно создать промежуточный объект, который будет выполняться на различных платформах с помощью специально созданного интерпретатора. Самый известный пример - Java and Jav virtual machine.

[identity profile] checkist.livejournal.com 2005-08-08 09:17 pm (UTC)(link)
Иногда можно. Есть кросс-платформенные средства, вроде Борландовской библиотеки CLX (так она, вроде, называется).

[identity profile] uchood.livejournal.com 2005-08-08 09:20 pm (UTC)(link)
что мешает при старте экзешника проверять платформу и запускать кусок кода для данной платформы? другое дело что это не принято.

[identity profile] anhydrol.livejournal.com 2005-08-08 09:39 pm (UTC)(link)
В юниксе нету екзешников, там есть права запуска, чтения и записи.

[identity profile] egorfine.livejournal.com 2005-08-08 10:08 pm (UTC)(link)
Сделать программу, которую можно скомпилировать под обе платформы - можно.

Сделать программу, которая при помощи третей будет работать под обеими платформами - можно. Скрипт на Perl, PHP или код жабы будет так работать.

Сделать исполняемый файл, который, один и тот же, будет выполняться на обеих платформах как родной бинарник - нельзя.

[identity profile] http://users.livejournal.com/_navi_/ 2005-08-08 10:15 pm (UTC)(link)
да, если в линуксе откомпилировать ядро со включенным модулем binfmtmisc и соответствующим образом его настроить, так чтобы он при обнаружении PE сигнатуры запускал файл при помощи эмулятора windows типа wine.
При этом все будет довольно прозрачно: устанавливается право на запуск для интересующего .exe-файла, и запускается как обычный линуксовый исполняемый файл.

[identity profile] avenger-f.livejournal.com 2005-08-09 08:11 am (UTC)(link)
Насколько мне известно, технически возможно собрать файл, который будет удовлетворять требованиям запуска в нескольких операционных системах. Конечно, это нетривиальная задача, и штатными средствами решить ее не получится.

[identity profile] romx.livejournal.com 2005-08-09 11:25 am (UTC)(link)
Я не программист конечно, но в принципе я знаю, что в PE-Executable можно спрятать разные исполняемые коды в одном файле. Вот например если win32-программу запустить в DOS, то она напишет "Is not DOS executable program" или что-то в этом роде. Так вот этот текст выводит как раз кусок кода PE Win32, который запускается, выяснив, что exe запускается в среде DOS. Но в принципе туда можно затолкать вполне полноценную программу исполняемую под DOS. Таким образом в одном filename.exe будет выполняться и программа под DOS и программа под win32.

[identity profile] cyberbobs.livejournal.com 2005-08-09 04:19 pm (UTC)(link)
В общем случае - нельзя.

Дело в том, что "экзешник" - чисто мелкософтовский формат файла. Который содержит в себе не только код, но и ресурсы (иконки, формы и т.д.), и, думается мне, массу прочей дряни (если честно, в MSDN лезть лень). Это не относится к COM-файлам, которые представляют собой чистый код без каких-то стандартных полей. Под них - много выпендривались те же демосценеры :) Например, существуют старые intro, которые работали и под *nix, и под DOS, и под OS/2.

Как было упомянуто выше, вполне возможно совместить DOS и Windows-программы, на демосцене, опять же, была парочка таких примеров. Но это - исключительно из-за того, что формат исполняемого файла - Portable Executable. То есть он, конечно, различается значительно, но всё равно ограниченно похож и ограниченно совместим.

У *nix-подобных ОС свои форматы исполняемых файлов. Поэтому - нет, не получится, если не использовать интерпретаторы.

[identity profile] onodera.livejournal.com 2005-08-09 06:58 pm (UTC)(link)
При помощи .NET и Mono можно.