Spec-Zone.ru › Kotlin 1.4

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

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

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

$ kotlinc foo.kt -p library -o bar

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

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

$ kotlinc 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.

Дополнительную информацию см. в INTEROP.md

Утилита klib

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

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

Для вывода содержимого библиотеки:

$ klib contents <name>

Для просмотра метаданных библиотеки:

$ klib info <name>

Для установки библиотеки в стандартное расположение используйте:

$ klib install <name>

Для удаления библиотеки из стандартного репозитория используйте:

$ klib remove <name>

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

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

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

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

package kotlinizer
val String.kotlinized
    get() = "Kotlin $this"
$ kotlinc 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 use.kt -l kotlinizer -o kohello

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

$ ./kohello.kexe
Hello, Kotlin world!

Удачи!

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

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

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

* Current compilation directory or an absolute path.

* All repositories specified with `-repo` flag.

* Libraries installed in the default repository (For now the default is  `~/.konan`, however it could be changed by setting **KONAN_DATA_DIR** environment variable).

* Libraries installed in `$installation/klib` directory.

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

Библиотеки Kotlin/Native — это zip-архивы, содержащие предопределённую структуру каталогов со следующим расположением:

foo.klib при распаковке как foo/ даёт:

  - foo/
    - $component_name/
      - ir/
        - Seriaized 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 *java property* format describing the library.

Пример структуры каталогов можно найти в каталоге klib/stdlib вашей установки.

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

Spec-Zone.ru

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