Можно создать промежуточный объект, который будет выполняться на различных платформах с помощью специально созданного интерпретатора. Самый известный пример - Java and Jav virtual machine.
CLX межплатформена только на уровне исходников. Компилируются они под конкретную платформу и выполняемый файл можно запускать только на той платформе, под которую он скомпилирован
Вопрос то - Можно ли? - ответ - Таки да! О смысле сего действа вороса не было.(в вирусописательстве например имеет смысл - не всё же на вижуалбэйсике вирусы писать). ЗЫ я же написал не принято. ;)
По поводу смысла - смотрите название нашего комьюнити :-) По поводу проверки платформы - возникает другой вопрос, тот фрагмент кода, который будет проверять это платформу, как его сделать платформно-независимым?
А для более практической реализации: можно сделать два комплекта DLL-ек, для Win и для Linux. А екзешник просто прописывает путь к нужной папке и все.
Его - никак. Единственный способ - сделать его частью ОС, чтобы она сама определяла, какую часть бинарника грузить. Впрочем, это не лучше двух отдельных бинарников.
На всякий случай предупреждаю, я с Линуксом никогда не работал, поэтому мои дальнейшие вопросы могут показаться несколько глупыми, за что я заранее извиняюсь.
Например, есть файл main.exe Можно ли ему в Линуксе присвоить права запуска и запустить?
Сделать программу, которую можно скомпилировать под обе платформы - можно.
"Серьезные" ребята именно так и поступают. Особенно если речь идет о чисто серверных системах типа СУБД и прочих движков. Пишется код на C/C++, который компилируется соответствующим компилятором под конкретную платформу. Платформо-зависимые куски выделяются всякими #IFDEF-ами.
да, если в линуксе откомпилировать ядро со включенным модулем binfmtmisc и соответствующим образом его настроить, так чтобы он при обнаружении PE сигнатуры запускал файл при помощи эмулятора windows типа wine. При этом все будет довольно прозрачно: устанавливается право на запуск для интересующего .exe-файла, и запускается как обычный линуксовый исполняемый файл.
Насколько мне известно, технически возможно собрать файл, который будет удовлетворять требованиям запуска в нескольких операционных системах. Конечно, это нетривиальная задача, и штатными средствами решить ее не получится.
Я не программист конечно, но в принципе я знаю, что в PE-Executable можно спрятать разные исполняемые коды в одном файле. Вот например если win32-программу запустить в DOS, то она напишет "Is not DOS executable program" или что-то в этом роде. Так вот этот текст выводит как раз кусок кода PE Win32, который запускается, выяснив, что exe запускается в среде DOS. Но в принципе туда можно затолкать вполне полноценную программу исполняемую под DOS. Таким образом в одном filename.exe будет выполняться и программа под DOS и программа под win32.
Дело в том, что "экзешник" - чисто мелкософтовский формат файла. Который содержит в себе не только код, но и ресурсы (иконки, формы и т.д.), и, думается мне, массу прочей дряни (если честно, в MSDN лезть лень). Это не относится к COM-файлам, которые представляют собой чистый код без каких-то стандартных полей. Под них - много выпендривались те же демосценеры :) Например, существуют старые intro, которые работали и под *nix, и под DOS, и под OS/2.
Как было упомянуто выше, вполне возможно совместить DOS и Windows-программы, на демосцене, опять же, была парочка таких примеров. Но это - исключительно из-за того, что формат исполняемого файла - Portable Executable. То есть он, конечно, различается значительно, но всё равно ограниченно похож и ограниченно совместим.
У *nix-подобных ОС свои форматы исполняемых файлов. Поэтому - нет, не получится, если не использовать интерпретаторы.
Ниасилил... Т.е. если я вот сейчас на шарпе построю что-то с чем-то без использования платформеннозависимых фишек, то оно само по себе заработает под пингвинами?
no subject
Date: 2005-08-08 09:04 pm (UTC)no subject
Date: 2005-08-08 09:08 pm (UTC)no subject
Date: 2005-08-08 09:13 pm (UTC)no subject
Date: 2005-08-08 09:17 pm (UTC)no subject
Date: 2005-08-09 07:39 am (UTC)no subject
Date: 2005-08-09 12:59 pm (UTC)no subject
Date: 2005-08-08 09:20 pm (UTC)no subject
Date: 2005-08-08 09:22 pm (UTC)no subject
Date: 2005-08-08 09:28 pm (UTC)О смысле сего действа вороса не было.(в вирусописательстве например имеет смысл - не всё же на вижуалбэйсике вирусы писать).
ЗЫ я же написал не принято. ;)
no subject
Date: 2005-08-08 09:33 pm (UTC)no subject
Date: 2005-08-08 09:40 pm (UTC)По поводу проверки платформы - возникает другой вопрос, тот фрагмент кода, который будет проверять это платформу, как его сделать платформно-независимым?
А для более практической реализации: можно сделать два комплекта DLL-ек, для Win и для Linux. А екзешник просто прописывает путь к нужной папке и все.
no subject
Date: 2005-08-08 10:15 pm (UTC)no subject
Date: 2005-08-09 05:58 am (UTC)no subject
Date: 2005-08-09 06:03 am (UTC)no subject
Date: 2005-08-08 09:37 pm (UTC)насколько я понимаю, конкретно под окна и под линукс - не получится.
no subject
Date: 2005-08-08 09:39 pm (UTC)no subject
Date: 2005-08-08 09:44 pm (UTC)Например, есть файл main.exe
Можно ли ему в Линуксе присвоить права запуска и запустить?
no subject
Date: 2005-08-09 05:31 am (UTC)no subject
Date: 2005-08-08 10:08 pm (UTC)Сделать программу, которая при помощи третей будет работать под обеими платформами - можно. Скрипт на Perl, PHP или код жабы будет так работать.
Сделать исполняемый файл, который, один и тот же, будет выполняться на обеих платформах как родной бинарник - нельзя.
no subject
Date: 2005-08-08 10:27 pm (UTC)"Серьезные" ребята именно так и поступают. Особенно если речь идет о чисто серверных системах типа СУБД и прочих движков. Пишется код на C/C++, который компилируется соответствующим компилятором под конкретную платформу. Платформо-зависимые куски выделяются всякими #IFDEF-ами.
no subject
Date: 2005-08-10 07:24 am (UTC)no subject
Date: 2005-08-10 07:25 am (UTC)no subject
Date: 2005-08-08 10:15 pm (UTC)При этом все будет довольно прозрачно: устанавливается право на запуск для интересующего .exe-файла, и запускается как обычный линуксовый исполняемый файл.
no subject
Date: 2005-08-09 08:11 am (UTC)no subject
Date: 2005-08-09 11:25 am (UTC)no subject
Date: 2005-08-09 04:19 pm (UTC)Дело в том, что "экзешник" - чисто мелкософтовский формат файла. Который содержит в себе не только код, но и ресурсы (иконки, формы и т.д.), и, думается мне, массу прочей дряни (если честно, в MSDN лезть лень). Это не относится к COM-файлам, которые представляют собой чистый код без каких-то стандартных полей. Под них - много выпендривались те же демосценеры :) Например, существуют старые intro, которые работали и под *nix, и под DOS, и под OS/2.
Как было упомянуто выше, вполне возможно совместить DOS и Windows-программы, на демосцене, опять же, была парочка таких примеров. Но это - исключительно из-за того, что формат исполняемого файла - Portable Executable. То есть он, конечно, различается значительно, но всё равно ограниченно похож и ограниченно совместим.
У *nix-подобных ОС свои форматы исполняемых файлов. Поэтому - нет, не получится, если не использовать интерпретаторы.
no subject
Date: 2005-08-09 06:58 pm (UTC)no subject
Date: 2005-08-10 07:27 am (UTC)