Библиотеки 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