Написание кроссплатформенной программы - PullRequest
4 голосов
/ 25 апреля 2011

Как я могу написать программу, которая работает как на Windows 7, так и на Mac OS X (и, возможно, на linux)?

Я слышал, Qt - отличная среда для создания кроссплатформенных графических интерфейсов, но я думаю, что каждая версия программы нуждается в перекомпиляции, не так ли? И стоит ли мне компилировать версию win под windows, версию mac под mac os x, версию linux под linux и так далее?

Я получаю идеи и / или предложения

Ответы [ 5 ]

5 голосов
/ 25 апреля 2011

Базовый двоичный формат отличается на каждой платформе, поэтому, если вы не используете виртуальную машину (как Java или Flash), вам придется перекомпилировать вашу программу на каждой платформе.

Некоторые компиляторы (например,GCC) разрешить кросс-компиляцию, но это не тривиально для настройки.Вероятно, самой простой системой для кросс-компиляции является Linux (есть несколько проектов с открытым исходным кодом, для которых кросс-компиляция настроена с Linux на Windows).

В случае приложения с графическим интерфейсом это зависит от языка -если вы застряли в C ++, Qt или wxWindows могут быть разумным выбором, предоставляя уровень абстракции над собственной оконной системой.

Если вы можете работать с Java, это упрощает жизнь, однако система управления окнами - это Java, а не нативная.

Еще один язык, о котором стоит подумать - это FreePascal с Lazarus - у него довольнохороший графический дизайнер, который компилируется в собственную оконную систему на любой платформе (WinAPI в Windows, Cocoa в OSX и GTK в Linux).

3 голосов
/ 25 апреля 2011

При написании кроссплатформенных программ я бы выделил две отдельные проблемы - как сделать ваш код переносимым и как организовать его сборку на различных платформах.

Что касается сборки, я бы посмотрел на кроссплатформенную систему сборки, такую ​​как CMake (http://www.cmake.org).). По сути, вы пишете скрипт, и CMake сгенерирует соответствующий файл проекта / make-файл для конкретного Затем вы собираете свою программу на каждой платформе, как обычно. Например, в Windows вы можете использовать CMake для создания проекта Visual C ++ для вас, а затем использовать Visual C ++ для фактического создания вашего исполняемого файла. В Linux вы можете используйте CMake для генерации make-файла, а затем соберите исполняемый файл, используя g ++.

Другой аспект заключается в том, как сделать ваш код переносимым - ключ в том, чтобы писать код, совместимый со стандартом C ++, и использовать библиотеки, которые сами переносимы на интересующие вас платформы. Вы можете (и иногда можете понадобиться) к) написать специфичный для платформы код для каждой из различных платформ - если вы это сделаете, вы должны спрятать его за переносимым интерфейсом и сделать так, чтобы остальная часть кода использовала его.

3 голосов
/ 25 апреля 2011

Не уверен, что C ++ является необходимостью, но Adobe Air - отличная кроссплатформенная среда разработки для настольных компьютеров, и она также растет для мобильной разработки. Если вам нужен пример основного приложения, использующего Adobe Air для развертывания на нескольких настольных ОС, просто проверьте tweetdeck http://www.tweetdeck.com/

Я бы настоятельно рекомендовал также изучить Flex и Flash Builder, если вы пойдете по этому пути.

2 голосов
/ 25 апреля 2011

Да, вам нужно компилировать для каждой версии при использовании C ++.

Единственное, что мешает вам скомпилировать программу, например, для Windows на Mac, - это получить инструмент для этого. Это возможно, но проблема заключается в поиске набора инструментов.

Также вы можете использовать виртуальную машину для запуска различных ОС и компиляции кода для всех платформ на одной машине.

1 голос
/ 25 апреля 2011

Java работает в Windows, OS X и Linux

...