Skip to content

Instantly share code, notes, and snippets.

@CypherpunkSamurai
Created April 27, 2026 18:29
Show Gist options
  • Select an option

  • Save CypherpunkSamurai/cda754f7c3969042a3365f9acbe6eb2f to your computer and use it in GitHub Desktop.

Select an option

Save CypherpunkSamurai/cda754f7c3969042a3365f9acbe6eb2f to your computer and use it in GitHub Desktop.

Revisions

  1. CypherpunkSamurai created this gist Apr 27, 2026.
    39 changes: 39 additions & 0 deletions dynlib.odin
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,39 @@
    package main

    import "core:fmt"
    import "core:dynlib"

    sym_get :: proc(lib: dynlib.Library, name: string) -> rawptr {
    addr, f := dynlib.symbol_address(lib, name)
    return addr
    }

    main :: proc() {
    lib, ok := dynlib.load_library("C:\\tools\\Odin\\dist\\LLVM-C.dll")
    if !ok {
    fmt.eprintln("load failed")
    return
    }

    create_ctx := transmute(proc() -> rawptr) sym_get(lib, "LLVMContextCreate")
    ctx := create_ctx()

    dispose_ctx := transmute(proc(rawptr)) sym_get(lib, "LLVMContextDispose")
    dispose_ctx(ctx)

    create_mod := transmute(proc(cstring) -> rawptr) sym_get(lib, "LLVMModuleCreateWithName")
    mod := create_mod("example")

    dispose_mod := transmute(proc(rawptr)) sym_get(lib, "LLVMDisposeModule")
    dispose_mod(mod)

    print_mod := transmute(proc(rawptr) -> cstring) sym_get(lib, "LLVMPrintModuleToString")
    ir := print_mod(mod)

    dispose_msg := transmute(proc(cstring)) sym_get(lib, "LLVMDisposeMessage")
    dispose_msg(ir)

    dynlib.unload_library(lib)

    fmt.println("OK")
    }