Я только что увидел, что Маттиас ответил, хотя я забыл опубликовать свой ответ, но я все равно просто опубликую его, так как он уточняет некоторые моменты:)
Во-первых, ваш C / C ++ компилируется в MoSync IL (Intermediate Language) с помощью GCC, используя наш пользовательский бэкэнд GCC. Затем для некоторых платформ (включая Android, Symbian и Windows Mobile) этот IL подается в «pipe-tool», который является ассемблером / компоновщиком / оптимизатором, который может выполнять разные функции для разных платформ. Вот несколько вариантов:
Для JavaME и нашего выпуска Blackberry, который скоро будет выпущен, pipe-tool создает байт-код MoSync, который представляет собой двоичное компактное представление на основе регистров. Этот байт-код упакован вместе со средой выполнения MoSync, которая содержит виртуальную машину. Когда ваши приложения запускаются, он считывает байт-код в память и начинает его интерпретировать.
Для Android, Symbian, Windows Mobile и т. Д. Процесс аналогичен, но вместо интерпретации кода ядро среды выполнения выполняет просмотр всего кода и перекомпилирует его в машинный код ARM на устройстве. Как только это будет сделано, он начнет выполнять только что созданный код ARM.
Для устройств iOS история все же немного другая - вместо преобразования MoSync IL в байт-код MoSync код преобразуется в исходный код на языке C, и создается проект xcode. Есть несколько причин для этого. Одна из них заключается в том, что для iOS динамическая генерация машинного кода ARM невозможна, и мы, поскольку динамическая загрузка кода также не разрешена, работать как виртуальная машина бессмысленно. Кроме того, в юридическом плане мы хотим обеспечить, чтобы способ производства приложений полностью соответствовал правилам и рекомендациям Apple.
Одной из сильных сторон MoSync является эта гибкость; используя упорядоченное промежуточное представление, в которое в конечном итоге преобразуется любой язык ввода и из которого всегда получается бинарный файл для любой платформы, мы получаем единую точку контакта между входом и выходом. Это позволяет нам добавлять новые языки ввода независимо от того, какие платформы поддерживаются, и наоборот, добавлять поддержку новых платформ независимо от языков ввода.
Когда люди спрашивают нас: «Может ли MoSync разрешить запуск программ Java на iPhone?» или "Это могло заставить программы C ++ работать на Windows Phone 7?" ответ всегда "да".
Если мы добавим поддержку Java в качестве языка ввода, он будет автоматически работать на любой платформе, поддерживаемой MoSync.
Когда мы добавляем поддержку Windows Phone 7, тогда АВТОМАТИЧЕСКИ все языки ввода, которые поддерживает MoSync, будут использоваться для этой платформы.
Я знаю, в это трудно поверить, но это правда :)