COCOS2D-X кроссплатформенная загадка для меня

Я разработчик C++, меня интересует фреймворк Cocos2d-x. Я знаю, что вы можете написать код на C++ с помощью фреймворка, скомпилировать его для разных платформ и все, у вас есть свое 2D на Windows, Android, iOS. Это удивительно, но я не понимаю, как это делается, и, следовательно, я беспокоюсь, что то, что я сделал для одной платформы, не будет работать на другой. Чтобы вдаваться в подробности, я хотел бы открыть свои опасения. Для этого давайте разберемся, что такое compiling и что такое running код.

  • Что значит скомпилировать код C++ для платформы (платформа — это архитектура ОС + ЦП)? Это означает, что исходный код C++ сопоставляется с инструкциями, понятными для конкретной архитектуры процессора. И окончательный набор инструкций упакован в исполняемый файл, который понятен для конкретной ОС, что означает, что конкретная SO или ОС, которые понимают, как обращаться с исполняемым файлом, могут его запустить. Также не следует забывать, что в наборе инструкций, которые содержит исполняемый файл, могут быть системные вызовы. Что также специфично для ОС.

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

Теперь вернемся к COSOS2D-X. Как можно скомпилировать код C++ так, чтобы его могли распознавать и загружать разные ОС и разные процессоры. Какие механизмы мы используем для получения соответствующих файлов .apk, .ipa или .exe. Есть ли ловушка, в которую мы можем попасть при использовании системных вызовов или вызовов, специфичных для процессора? Вообще как решаются все эти проблемы? Пожалуйста, объясните процесс, например, для Android или было бы здорово и для iOS. :)


person Narek    schedule 03.08.2013    source источник


Ответы (1)


Cocos2d-x имеет 95% одного и того же кода для всех целевых ОС и платформ. И у него 5% кода, который написан для конкретной платформы. Например, есть несколько исходников Java для Android. И есть несколько файлов Obj-C для iOS. Также есть код на C++ для разных платформ. #define используется для разделения этого кода. Примером такого кода является работа с файлами, которые написаны на C++, но отличаются от платформы к платформе.

За создание соответствующего выходного файла отвечают компилятор и SDK, используемые для целевой платформы. Например, xCode с компилятором clang сгенерирует сборку для iOS. В то время как Android NDK с gcc внутри соберет apk.

person Seagull    schedule 03.08.2013