Существует ли кросс-платформенный компилятор, который может скомпилировать собственный исполняемый файл, который можно запустить как в Linux-окнах? Может ли оно существовать? - PullRequest
2 голосов
/ 05 февраля 2010

Я помню, как несколько лет назад (2002) существовал многоэтапный вирус, который мог работать в Linux и Windows. Я не знаю, может ли компилятор специально создать исполняемый файл, чтобы он мог читаться как в формате ELF, так и в PE, чтобы ОС начинала выполняться в разных точках входа. Или программа, которая может объединить две программы, одну, скомпилированную с помощью mingw, одну, скомпилированную в native linux, в одну программу.

Я не знаю, существует ли такая программа или она может существовать, и я знаю, что это может быть реализовано на Java или каком-либо языке сценариев, но это не нативная программа.

Представьте себе возможности, я мог бы развернуть программу с библиотеками linux и window (и, возможно, os / x) и одним основным исполняемым файлом, который можно было запустить на любой ОС. Кроссплатформенная поддержка компенсирует больший размер.

Ответы [ 3 ]

2 голосов
/ 05 февраля 2010

Программы Windows вначале имеют заглушку DOS, и я только что запустил исполняемый файл ELF через debug.com, который сказал, что первой инструкцией этого exe была JG 0x147. Просто может быть что-то можно сделать с этим ...

2 голосов
/ 05 февраля 2010

номер

Windows и Linux используют совершенно разные двоичные форматы файлов. См. Портативный исполняемый файл (Windows) и Исполняемый и связываемый формат (Linux).

Что-то вроде WINE будет запускать исполняемые файлы Windows в Linux, но это не то же самое.

0 голосов
/ 05 февраля 2010

Это действительно ужасная идея по нескольким причинам.

  1. Кросс-компиляция через границы операционной системы крайне сложно сделать правильно.
  2. Если вы выберете второй путь (создание отдельных двоичных файлов PE в Windows и ELF в Linux, а затем каким-то образом их объединить), вам придется обслуживать две машины, каждая из которых работает под управлением отдельной ОС и полного стека сборки, и вам потребуется убедитесь, что вы протестировали обе версии по отдельности, прежде чем склеивать их вместе.
  3. Динамическое связывание - это уже трудная задача для управления в Windows и в Linux; Статическое связывание может генерировать двоичные файлы, с которыми гораздо неудобнее иметь дело, чем любые мнимые преимущества, которые вы получаете от предоставления конечному пользователю единого типа файла.

Если вы хотите запустить один и тот же двоичный исполняемый файл в нескольких ОС, вы можете выбрать Java, Mono и, возможно, NativeClient - плагин для браузера, разработанный Google для решения проблемы «слишком медленные веб-приложения».

...