| 1 | module 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. |
| 6 | import os |
| 7 | import dl |
| 8 | import dl.loader |
| 9 | |
| 10 | type FNAdder = fn (int, int) int |
| 11 | |
| 12 | const cfolder = os.dir(@FILE) |
| 13 | const 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 | |
| 20 | fn 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 | |