To produce a library with the Kotlin/Native compiler use the -produce library
or -p library
flag. For example:
the above 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:
the above command will produce a program.kexe
out of qux.kt
and bar.klib
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 INTEROP.md
The klib library management utility allows you to inspect and install the libraries.
The following commands are available.
To list library contents:
To inspect the bookkeeping details of the library
To install the library to the default location use
To remove the library from the default repository use
All of the above commands accept an additional -repository <directory>
argument for specifying a repository different to the default one.
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:
We 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 we have just created:
And run the program:
Have fun!
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 `-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 libraries are zip files containing a predefined
directory structure, with the following layout:
foo.klib when unpacked as foo/ gives us:
- foo/
- 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.
An example layout can be found in klib/stdlib
directory of your installation.