Spec-Zone.ru › Kotlin 1.8

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

Особенности компилятора Kotlin

Для создания библиотеки с помощью компилятора Kotlin/Native используйте флаг -produce library или -p library. Например:

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

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

Для подключения к библиотеке используйте флаг -library <name> или -l <name>. Например:

$ kotlinc-native qux.kt -l bar

Эта команда создаст program.kexe из qux.kt и bar.klib

Особенности инструмента cinterop

Инструмент cinterop генерирует .klib оболочки для нативных библиотек в качестве основного результата. Например, используя простой файл определения нативной библиотеки libgit2.def , предоставляемый в вашей дистрибуции Kotlin/Native

$ cinterop -def samples/gitchurn/src/nativeInterop/cinterop/libgit2.def -compiler-option -I/usr/local/include -o libgit2

мы получим libgit2.klib.

Дополнительные сведения см. в разделе C Interop.

Утилита klib

Утилита управления библиотеками klib позволяет просматривать и устанавливать библиотеки.

Доступны следующие команды:

  • content – просмотр содержимого библиотеки:

    $ klib contents <name>
    
  • info – просмотр данных учёта библиотеки

    $ klib info <name>
    
  • install – установка библиотеки в стандартное расположение

    $ klib install <name>
    
  • remove – удаление библиотеки из стандартного репозитория

    $ klib remove <name>
    

Все вышеперечисленные команды принимают дополнительный -repository <directory> аргумент для указания репозитория, отличного от стандартного.

$ klib <command> <name> -repository <directory>

Несколько примеров

Сначала создадим библиотеку. Разместите исходный код небольшой библиотеки в kotlinizer.kt:

package kotlinizer
val String.kotlinized
    get() = "Kotlin $this"
$ kotlinc-native kotlinizer.kt -p library -o kotlinizer

Библиотека создана в текущем каталоге:

$ ls kotlinizer.klib
kotlinizer.klib

Теперь давайте посмотрим на содержимое библиотеки:

$ klib contents kotlinizer

Вы можете установить kotlinizer в стандартный репозиторий:

$ klib install kotlinizer

Удалите все следы из текущего каталога:

$ rm kotlinizer.klib

Создайте очень короткую программу и поместите её в use.kt:

import kotlinizer.*

fun main(args: Array<String>) {
    println("Hello, ${"world".kotlinized}!")
}

Теперь скомпилируйте программу, подключая библиотеку, которую вы только что создали:

$ kotlinc-native use.kt -l kotlinizer -o kohello

И запустите программу:

$ ./kohello.kexe
Hello, Kotlin world!

Приятного пользования!

Расширенные темы

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

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

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

  • Все репозитории, указанные с флагом -repo.

  • Библиотеки, установленные в стандартном репозитории (На данный момент стандартным является ~/.konan, но это можно изменить, установив переменную окружения KONAN_DATA_DIR).

  • Библиотеки, установленные в каталоге $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/stdlib вашей установки.

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

Использование относительных путей в klibs доступно начиная с Kotlin 1.6.20.

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

tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompilationTask::class).configureEach {
    // $base is a base path of source files
    compilerOptions.freeCompilerArgs.add("-Xklib-relative-path-base=$base")
}
tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompilationTask).configureEach {
    compilerOptions {
        // $base is a base path of source files
        freeCompilerArgs.add("-Xklib-relative-path-base=$base")
    }
}
Последнее изменение: 10 января 2023 г.
Справочник DSL плагина CocoaPods Gradle Библиотеки платформы

© 2010–2023 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