v / examples / dynamic_library_loader / use_shared_library.v
33 lines · 29 sloc · 851 bytes · c51d30bf5309653c6b573ec815268e69a78ea8cc
Raw
1module main
2
3// Note: This program, requires that the shared library was already compiled.
4// To do so, run `v -d no_backtrace -o library -shared modules/library/library.v`
5// before running this program.
6import os
7import dl
8import dl.loader
9
10type FNAdder = fn (int, int) int
11
12const cfolder = os.dir(@FILE)
13const default_paths = [
14 os.join_path(cfolder, 'library${dl.dl_ext}'),
15 os.join_path(cfolder, 'location1/library${dl.dl_ext}'),
16 os.join_path(cfolder, 'location2/library${dl.dl_ext}'),
17 os.join_path(cfolder, 'modules/library/library${dl.dl_ext}'),
18]
19
20fn main() {
21 mut dl_loader := loader.get_or_create_dynamic_lib_loader(
22 key: cfolder + '/library'
23 paths: default_paths
24 )!
25 defer {
26 dl_loader.unregister()
27 }
28 sym := dl_loader.get_sym('add_1')!
29 f := FNAdder(sym)
30 eprintln('f: ${ptr_str(f)}')
31 res := f(1, 2)
32 eprintln('res: ${res}')
33}
34