aboutsummaryrefslogtreecommitdiff
path: root/test/standalone/load_dynamic_library/main.zig
blob: baf47c23adf6ad2087169b2e0abf7aaf14a19b69 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
const std = @import("std");

pub fn main() !void {
    var gpa = std.heap.GeneralPurposeAllocator(.{}){};
    defer _ = gpa.deinit();
    const args = try std.process.argsAlloc(gpa.allocator());
    defer std.process.argsFree(gpa.allocator(), args);

    const dynlib_name = args[1];

    var lib = try std.DynLib.open(dynlib_name);
    defer lib.close();

    const Add = switch (@import("builtin").zig_backend) {
        .stage1 => fn (i32, i32) callconv(.C) i32,
        else => *const fn (i32, i32) callconv(.C) i32,
    };

    const addFn = lib.lookup(Add, "add") orelse return error.SymbolNotFound;

    const result = addFn(12, 34);
    std.debug.assert(result == 46);
}