Kotlin/Native libraries
Kotlin compiler specifics
To produce a library with the Kotlin/Native compiler use the -produce library or -p library flag. For example:
This command will produce a bar.klib with the compiled contents of foo.kt.
To link to a library use the -library <name> or -l <name> flag. For example:
This command will produce a program.kexe out of qux.kt and bar.klib
cinterop tool specifics
The cinterop tool produces .klib wrappers for native libraries as its main output. For example, using the simple libgit2.def native library definition file provided in your Kotlin/Native distribution
we will obtain libgit2.klib.
See more details in C Interop.
klib utility
The klib library management utility allows you to inspect and install the libraries.
The following commands are available:
content– list library contents:$ klib contents <name>info– inspect the bookkeeping details of the library$ klib info <name>install– install the library to the default location use$ klib install <name>remove– remove the library from the default repository use$ klib remove <name>
All of the above commands accept an additional -repository <directory> argument for specifying a repository different to the default one.
Several examples
First let's create a library. Place the tiny library source code into kotlinizer.kt:
The library has been created in the current directory:
Now let's check out the contents of the library:
You can install kotlinizer to the default repository:
Remove any traces of it from the current directory:
Create a very short program and place it into a use.kt:
Now compile the program linking with the library you have just created:
And run the program:
Have fun!
Advanced topics
Library search sequence
When given a -library foo flag, the compiler searches the foo library in the following order:
Current compilation directory or an absolute path.
All repositories specified with
-repoflag.Libraries installed in the default repository.
Libraries installed in
$installation/klibdirectory.
Library format
Kotlin/Native libraries are zip files containing a predefined directory structure, with the following layout:
foo.klib when unpacked as foo/ gives us:
An example layout can be found in klib/stdlib directory of your installation.
Using relative paths in klibs
A serialized IR representation of source files is a part of a klib library. It includes paths of files for generating proper debug information. By default, stored paths are absolute. With the -Xklib-relative-path-base compiler option, you can change the format and use only relative path in the artifact. To make it work, pass one or multiple base paths of source files as an argument: