Кроссплатформенность C? - PullRequest
9 голосов
/ 19 сентября 2010

Я использую Linux Ubuntu 10.04, и у меня есть машина с Windows 7 и MacBook с Mac OS X 10.6.4. Как я могу написать простую программу на C (как в NOT QT! ), например:

#include <stdio.h>

int main(int argc, char **argv)
{
    printf("Hello Linux and Mac and Windows!")
    return 0;
}

для запуска на всех моих машинах без необходимости компилировать эту программу в Ubuntu, затем в Windows 7, затем в Mac OS X? Могу ли я просто создать это в Ubuntu и скомпилировать его для работы в нескольких разных операционных системах?
UPDATE
Я не хочу производить ОДИН бинарный файл для запуска на всех. Я имею в виду создание ТРИ двоичных файлов из одного и того же кода C в одной и той же ОС.

Ответы [ 2 ]

11 голосов
/ 19 сентября 2010

Исполняемый файл имеет определенный формат (например, ELF) и архитектуру (например, x86). Таким образом, вам придется компилировать несколько раз. Тем не менее, существует возможность кросс-компиляции, например, Windows 7 x86 и Mac OS X x86 из Ubuntu. Процедуры для каждого из них разные, как и следовало ожидать.

Для Windows вам понадобится mingw32. См Компилировать консольные приложения Windows C в Linux .

Для OS X см. Как скомпилировать двоичные файлы Intel Mac для Linux? , которая ссылается на учебник .

Вы можете искать, чтобы найти больше информации по каждому.

2 голосов
/ 19 сентября 2010

К сожалению, форматы исполняемых файлов, используемые в Linux, Windows и OSX, сильно отличаются в деталях. Невозможно создать один двоичный файл, работающий на всех трех.

* позволяет генерировать исполняемые файлы Windows и OSX, используя кросс-компиляторы из Linux (или наоборот, в любой другой комбинации, которая вам нравится), но настройка среды сборки, вероятно, доставляет больше хлопот, чем стоит. Посмотрите http://www.kegel.com/crosstool/, если вы действительно хотите попробовать это.

...