[identity profile] baalexxx.livejournal.com posting in [community profile] useless_faq
Можно ли создать экзешник, который запускается и в Windows, и в Linux?

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

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

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

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

Date: 2005-08-09 07:39 am (UTC)
From: [identity profile] gvadelupa.livejournal.com
CLX межплатформена только на уровне исходников. Компилируются они под конкретную платформу и выполняемый файл можно запускать только на той платформе, под которую он скомпилирован

Date: 2005-08-09 12:59 pm (UTC)
From: [identity profile] checkist.livejournal.com
Спасибо за объяснение. Сам не пользовался, посему не знал.

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

Date: 2005-08-08 09:22 pm (UTC)
From: [identity profile] netp-npokon.livejournal.com
А какой смысл пихать два бинарника в один? Компиляцию это, мягко говоря, не облегчит.

Date: 2005-08-08 09:28 pm (UTC)
From: [identity profile] uchood.livejournal.com
Вопрос то - Можно ли? - ответ - Таки да!
О смысле сего действа вороса не было.(в вирусописательстве например имеет смысл - не всё же на вижуалбэйсике вирусы писать).
ЗЫ я же написал не принято. ;)

Date: 2005-08-08 09:33 pm (UTC)
From: [identity profile] netp-npokon.livejournal.com
С вирусами другая ситуация - там все-таки бинарники для одной платформы. Хотя в остальном согласен ))

Date: 2005-08-08 10:15 pm (UTC)
From: [identity profile] netp-npokon.livejournal.com
Его - никак. Единственный способ - сделать его частью ОС, чтобы она сама определяла, какую часть бинарника грузить. Впрочем, это не лучше двух отдельных бинарников.

Date: 2005-08-09 05:58 am (UTC)
From: [identity profile] darmeon.livejournal.com
извините за занудство, но вы злоупотребляете виндовой терминологией :) "dll-лек" и "экзешников" в прямом смысле слова в никсах нет %)

Date: 2005-08-09 06:03 am (UTC)
From: [identity profile] darmeon.livejournal.com
ой, об этом уже сказали ниже :)

Date: 2005-08-08 09:37 pm (UTC)
From: [identity profile] fuckout.livejournal.com
чтобы после старта экзешника что-то проверить, нужно чтоб система его запустила, т.е. так должен быть вполне валидный для обоих систем формат.

насколько я понимаю, конкретно под окна и под линукс - не получится.

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

Date: 2005-08-09 05:31 am (UTC)
From: [identity profile] anhydrol.livejournal.com
Можно сделать это и main.mp3 или main.txt, безпроблем делаются исполняемыми файлами. Другое дело что они просто не запустятся.

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

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

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

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

"Серьезные" ребята именно так и поступают. Особенно если речь идет о чисто серверных системах типа СУБД и прочих движков. Пишется код на C/C++, который компилируется соответствующим компилятором под конкретную платформу. Платформо-зависимые куски выделяются всякими #IFDEF-ами.

Date: 2005-08-10 07:24 am (UTC)
From: [identity profile] allegecityrat.livejournal.com
Или без всяких ifdef пишется что-нибудь на жабе или на шарпе.

Date: 2005-08-10 07:25 am (UTC)
From: [identity profile] allegecityrat.livejournal.com
В том смысле, чтоб работа с ресурсами машины шла ТОЛЬКО через каркас - будь то жабамашина или датнет.

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

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

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

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

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

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

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

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

Date: 2005-08-10 07:27 am (UTC)
From: [identity profile] allegecityrat.livejournal.com
Ниасилил... Т.е. если я вот сейчас на шарпе построю что-то с чем-то без использования платформеннозависимых фишек, то оно само по себе заработает под пингвинами?