Что является итоговым файлом компиляции Kotlin Native

Ответ

Итоговым файлом компиляции Kotlin Native является бинарный файл, формат которого зависит от целевой платформы:

  • Linux/macOS: .kexe (исполняемый файл)
  • Windows: .exe (исполняемый файл)
  • iOS/Android: .klib (библиотека) или .framework (для iOS)
  • WebAssembly: .wasm

Пример компиляции через командную строку:

kotlinc-native hello.kt -o hello

Создаст hello.kexe (на Linux/macOS) или hello.exe (на Windows). Для библиотек:

kotlinc-native mylib.kt -produce library -o mylib

Создаст mylib.klib.

Ответ 18+ 🔞

Давай разберемся, что там у тебя получается на выходе, когда ты этот Kotlin Native компилируешь. А то как будто на дворе 2002-й год и у каждого свои заморочки.

Короче, смотри. Ты написал свой код, нажал волшебную кнопку — и что? А на выходе у тебя получается бинарный файл. Но вот формат этого файла — это уже ёперный театр, он целиком и полностью зависит от того, куда ты целишься. Прямо хитрая жопа получается.

  • Под Linux или macOS? Поздравляю, получишь файлик с расширением .kexe. Самый обычный исполняемый файл, который можно запустить в терминале. Никакой виртуальной машины, ничего — чистая машинка.
  • Под Windows? Ну тут всё предсказуемо, будет классический .exe. Можно хоть на рабочий стол кинуть и запустить, если, конечно, у тебя там не какая-нибудь каркалыга в коде.
  • Запулить это всё в iOS или Android? Тут уже не исполняемый файл, а библиотека. Для этого мира ты получишь файл .klib. А для iOS, если хочешь красоты, можно и .framework собрать. Это уже как кирпичики, из которых нативное приложение лепится.
  • Ну и модный WebAssembly? Получишь, ясное дело, .wasm модуль, который потом в браузере можно запускать. Пизда рулю, будущее наступило.

Теперь, как это всё на практике выглядит. Открываешь ты свой терминал, и пишешь что-то типа:

kotlinc-native hello.kt -o hello

И всё, волнение ебать! Компилятор подумает и выдаст тебе, в зависимости от системы, либо hello.kexe, либо hello.exe. Запустил — и сидишь, радуешься.

А если тебе нужна не программа, а именно библиотека (тот самый .klib), чтобы другие проекты твой гениальный код использовали, то команда будет уже другая:

kotlinc-native mylib.kt -produce library -o mylib

На выходе — mylib.klib. Можешь теперь этим файлом, как кирпичом, в другие нативные проекты швыряться. В общем, не так страшен чёрт, как его малюют. Главное — понять, что под каждую платформу свой костыль, простите, свой бинарник.