Spec-Zone.ru › Kotlin 2

Библиотеки Kotlin/Native

Компиляция библиотеки

Для создания артефакта *.klib для вашей библиотеки можно использовать файл сборки проекта или компилятор Kotlin/Native.

Использование файла сборки Gradle

Вы можете скомпилировать артефакт библиотеки *.klib, указав целевую платформу Kotlin/Native в файле сборки Gradle:

  1. В файле build.gradle(.kts) объявите как минимум одну целевую платформу Kotlin/Native. Например:

    // build.gradle.kts
    plugins {
        kotlin("multiplatform") version "2.4.20"
    }
    
    kotlin {
        macosArm64()    // on macOS
        // linuxArm64() // on Linux
        // mingwX64()   // on Windows
    }
    
  2. Запустите задачу <target>Klib. Например:

    ./gradlew macosArm64Klib
    

Gradle автоматически компилирует исходные файлы для этой целевой платформы и создает артефакт .klib в каталоге build/libs проекта.

Использование компилятора Kotlin/Native

Чтобы создать библиотеку с помощью компилятора Kotlin/Native:

  1. Скачайте и установите компилятор Kotlin/Native.

  2. Чтобы скомпилировать исходный файл Kotlin/Native в библиотеку, используйте параметр -produce library или -p library:

    kotlinc-native foo.kt -p library -o bar
    

    Эта команда компилирует содержимое файла foo.kt в библиотеку с именем bar и создает артефакт bar.klib.

  3. Чтобы связать другой файл с библиотекой, используйте параметр -library <name> или -l <name>. Например:

    kotlinc-native qux.kt -l bar
    

    Эта команда компилирует содержимое исходного файла qux.kt и библиотеки bar.klib и создает итоговый исполняемый двоичный файл program.kexe.

Утилита klib

Утилита управления библиотеками klib позволяет изучать библиотеки с помощью следующего синтаксиса:

klib <command> <library path> [<option>]

В настоящее время доступны следующие команды:

Команда

Описание

info

Общая информация о библиотеке.

dump-abi

Вывести снимок ABI библиотеки. Каждая строка снимка соответствует одному объявлению. Если в объявлении произойдет несовместимое с ABI изменение, оно будет видно в соответствующей строке снимка.

dump-ir

Вывести промежуточное представление (IR) объявлений библиотеки. Используйте только для отладки.

dump-ir-signatures

Вывести сигнатуры IR всех непубличных объявлений библиотеки и всех непубличных объявлений, используемых этой библиотекой (в виде двух отдельных списков). Эта команда использует только данные из IR.

dump-ir-inlinable-functions

Вывести IR встраиваемых функций библиотеки. Используйте только для отладки.

dump-metadata

Вывести метаданные всех объявлений библиотеки. Используйте только для отладки.

dump-metadata-signatures

Вывести сигнатуры IR всех непубличных объявлений библиотеки на основе метаданных библиотеки. В большинстве случаев результат совпадает с результатом команды dump-ir-signatures, которая формирует сигнатуры на основе IR. Однако при использовании во время компиляции плагинов компилятора, преобразующих IR (например, Compose), сигнатуры измененных объявлений могут отличаться.

Все перечисленные выше команды для вывода данных принимают дополнительный аргумент -signature-version {N}, указывающий утилите klib, какую версию сигнатур IR использовать при их выводе. Если аргумент не задан, используется самая актуальная версия, поддерживаемая библиотекой. Например:

klib dump-metadata-signatures mylib.klib -signature-version 1

Кроме того, команда dump-metadata принимает аргумент -print-signatures {true|false}, который указывает утилите klib выводить сигнатуры IR для каждого объявления.

Создание и использование библиотеки

  1. Создайте библиотеку, поместив исходный код в kotlinizer.kt:

    package kotlinizer
    
    val String.kotlinized
        get() = "Kotlin $this"
    
  2. Скомпилируйте библиотеку в .klib:

    kotlinc-native kotlinizer.kt -p library -o kotlinizer
    
  3. Проверьте, появилась ли созданная библиотека в текущем каталоге:

    ls kotlinizer.klib
    
  4. Просмотрите общую информацию о библиотеке:

    klib info kotlinizer.klib
    
  5. Создайте небольшую программу в файле use.kt:

    import kotlinizer.*
    
    fun main(args: Array<String>) {
        println("Hello, ${"world".kotlinized}!")
    }
    
  6. Скомпилируйте программу, связав исходный файл use.kt с библиотекой:

    kotlinc-native use.kt -l kotlinizer -o kohello
    
  7. Запустите программу:

    ./kohello.kexe
    

В результате вы должны увидеть Hello, Kotlin world!.

Порядок поиска библиотек

В ближайшее время механизм поиска библиотек изменится. Ожидаются обновления этого раздела; не полагайтесь на устаревшие флаги.

Если указан параметр -library foo, компилятор ищет библиотеку foo в следующем порядке:

  1. Текущий каталог компиляции или абсолютный путь.

  2. Библиотеки, установленные в репозитории по умолчанию.

    Репозиторий по умолчанию — ~/.konan. Его можно изменить, задав свойство Gradle konan.data.dir.

    Также можно использовать параметр компилятора -Xkonan-data-dir, чтобы настроить собственный путь к каталогу с помощью инструментов cinterop и konanc.

  3. Библиотеки, установленные в каталоге $installation/klib.

Формат библиотеки

Библиотеки Kotlin/Native — это ZIP-файлы с предопределенной структурой каталогов, которая выглядит следующим образом:

После распаковки foo.klib как foo/ получаем:

- foo/
  - $component_name/
    - ir/
      - Serialized Kotlin IR.
    - targets/
      - $platform/
        - kotlin/
          - Kotlin compiled to LLVM bitcode.
        - native/
          - Bitcode files of additional native objects.
      - $another_platform/
        - There can be several platform specific kotlin and native pairs.
    - linkdata/
      - A set of ProtoBuf files with serialized linkage metadata.
    - resources/
      - General resources such as images. (Not used yet).
    - manifest - A file in the java property format describing the library.

Пример структуры можно найти в каталоге klib/common/stdlib в папке установки компилятора Kotlin/Native.

Использование относительных путей в klib

Сериализованное представление IR исходных файлов — часть библиотеки klib. Оно содержит пути к файлам, необходимые для создания корректной отладочной информации. По умолчанию сохраняются абсолютные пути.

С помощью параметра компилятора -Xklib-relative-path-base можно изменить формат и использовать в артефакте только относительные пути. Для этого передайте в качестве аргумента один или несколько базовых путей к исходным файлам:

import org.jetbrains.kotlin.gradle.tasks.KotlinCompilationTask
// ...

tasks.named<KotlinCompilationTask<*>>("compileKotlin").configure {
    // $base is a base path of source files
    compilerOptions.freeCompilerArgs.add("-Xklib-relative-path-base=$base")
}
import org.jetbrains.kotlin.gradle.tasks.KotlinCompilationTask
// ...

tasks.named('compileKotlin', KotlinCompilationTask) {
    compilerOptions {
        // $base is a base path of source files
        freeCompilerArgs.add("-Xklib-relative-path-base=$base")
    }
}

Что дальше?

Узнайте, как использовать инструмент cinterop для создания артефактов *.klib

8 января 2026 г.
Начало работы с Kotlin/NativeБиблиотеки платформ

© 2010–2026 JetBrains s.r.o. and Kotlin Programming Language contributors
Licensed under the Apache License, Version 2.0.
https://kotlinlang.org/docs/native-libraries.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API