программы кодируются отдельно для разных операционных систем? - PullRequest
4 голосов
/ 05 января 2011

Если программа была написана на c ++ для запуска в Windows, нужно ли ее полностью переписывать для запуска в Mac OS или мобильной ОС?

Ответы [ 5 ]

5 голосов
/ 05 января 2011

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

Во-первых, старайтесь всегда писать стандартный код. Во-вторых, используйте кроссплатформенные библиотеки, такие как Boost, Qt ...

4 голосов
/ 05 января 2011

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

Многие программы делают еще один шаг вперед, используя заранее написанные библиотеки, такие как Qt или Boost, для обработки некоторых кроссов.-платформа глупости, но это (по сути) вышеупомянутая идея в более широком масштабе.

3 голосов
/ 05 января 2011

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

Однако многие из более «интересных» функций, которые вы, возможно, захотите добавить в типичное приложение, не являются частью Standard C ++. Это включает в себя GUI, потоки, сокеты и низкоуровневые вызовы OS API. Как правило, они не переносимы, и части кода, использующие эти функции, необходимо будет реализовать отдельно для каждой операционной системы или платформы.

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

Кроме того, большая часть нестандартного кода C ++ по-прежнему соответствует некоторым стандартам, таким как POSIX , который поддерживается на разных платформах. Например, большинство систем UNIX, включая Linux и Mac OS X, поддерживают потоки POSIX (API-интерфейс pthread).

1 голос
/ 05 января 2011

Программное обеспечение может быть написано на нескольких языках, а затем связаны друг с другом. Например, я могу кодировать внутреннюю логику моего приложения на C ++ (часто используя Boost), а затем создать два отдельных интерфейса на C # для Windows и Objective-C для Mac. Я могу связать компоненты C ++ и C # для отправки на одну платформу, а затем связать компоненты C ++ и Objective-C для доставки на другую. Такой подход даст наиболее «родной» внешний вид для каждой платформы.

В качестве альтернативы, я могу написать весь интерфейс на C ++, используя Qt или WxWidgets. Это будет работать на всех платформах, хотя и без 100% наворотов платформы.

1 голос
/ 05 января 2011

Если в самом коде используются библиотеки, которые поддерживаются на всех целевых платформах, то вам понадобятся только соответствующие компиляторы для создания допустимого двоичного файла для каждой системы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...