The os/Dynlib module
The Dynlib module allows one to load dynamic libraries on all
major platforms.
Basic usage
Let’s open a library:
import os/Dynlib
lib := Dynlib load("libm")
We don’t need to specify the .so, .dynlib, or .dll extension here, it is
set automatically by platform, although the original path will be tested first,
in case of non-standard file extension.
If the lib returned is null, it wasn’t found or couldn’t be opened:
if (!lib) {
raise("Couldn't load library!")
}
We can then retrieve a symbol:
cosAddr := lib symbol("cos")
And cast it to a more useful function. Since Func is actually
a function pointer and a context, we use a cover literal, passing
null for the context:
cos := (cosAddr, null) as Func (Double) -> Double
Which we can then use!
"cos(PI / 4) = %.3f" printfln(cos(3.14 * 0.25))
This prints cos(PI / 4) = 0.707, as expected.
When we’re done with the library we can just close it:
lib close()
Note: on Windows, failing to close a library may lead to a crash on application exit.