aboutsummaryrefslogtreecommitdiff
path: root/core/dynlib/lib_unix.odin
blob: 42eb96c316afd3b1b3830a906265a97b2732f2e8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// +build linux, darwin, freebsd
package dynlib

import "core:os"

load_library :: proc(path: string, global_symbols := false) -> (Library, bool) {
    flags := os.RTLD_NOW;
    if global_symbols {
    	flags |= os.RTLD_GLOBAL;
    }
    lib := os.dlopen(path, flags);
    return Library(lib), lib != nil;
}

unload_library :: proc(library: Library) {
    os.dlclose(rawptr(library));
}

symbol_address :: proc(library: Library, symbol: string) -> (ptr: rawptr, found: bool) {
    ptr = os.dlsym(rawptr(library), symbol);
    found = ptr != nil;
    return;
}