Написание кроссплатформенной программы

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

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

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


person Marco A.    schedule 25.04.2011    source источник
comment
Проверьте этот аналогичный вопрос title="кроссплатформенная разработка для Windows OS X с большой существующей базой кода">stackoverflow.com/questions/5759487/   -  person nathan    schedule 25.04.2011


Ответы (5)


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

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

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

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

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

person Kornel Kisielewicz    schedule 25.04.2011
comment
В любом случае, компиляция приложения Qt не заставляет его работать на каждой ОС, верно? Я просто могу повторно использовать исходный код (возможно), но мне нужны другие exe/dmg/etcs... верно? - person Marco A.; 25.04.2011
comment
Плюс один за добавление wxWidgets. - person nathan; 25.04.2011
comment
@Paul, да, вам нужно перекомпилировать его для каждой ОС. - person Kornel Kisielewicz; 25.04.2011
comment
Не забывайте, что у вас есть SWT для Java. Он имеет собственные виджеты и нуждается только в переупаковке с правильным файлом JAR для каждой платформы (но это гораздо менее болезненно, чем повторная компиляция). - person WhyNotHugo; 15.05.2012
comment
Также предлагаю CMake, если кто-то пытается настроить собственную компиляцию на нескольких платформах. - person Marco A.; 29.11.2013

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

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

person Tony Lukasavage    schedule 25.04.2011
comment
TweetDeck отказался от кодовой базы Adobe AIR с декабря 2011 года: en.wikipedia.org/wiki/TweetDeck - person Prid; 08.09.2020

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

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

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

person Stuart Golodetz    schedule 25.04.2011
comment
Спасибо, cmake кажется хорошим способом, даже если программирование со стандартным кодом для всех платформ сложно. Я думаю, что C был бы хорошим способом или C++ (поддерживается в Win32, MacOsX и Linux) - person Marco A.; 25.04.2011

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

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

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

person bcsanches    schedule 25.04.2011

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

person grantk    schedule 25.04.2011