环境: ubuntu 22.04 zig 0.10

首先打开终端, 建立zig exe项目:

mkdir libtest
zig init-exe 

项目结构如下:

├── build.zig
└── src
    ├── main.zig
    └── mylib
        └── math.zig
  1. 导入自定义api
    打开main.zig:
    删除多余的代码,保留如下:
const std = @import("std");
pub fn main() !void {
    // Prints to stderr (it's a shortcut based on `std.io.getStdErr()`)
    std.debug.print("All your {s} are belong to us.\n", .{"codebase"});
}

使用zig build run 编译运行
如编译无错误,则看到输出 All your codebase are belong to us.

在libtest目录下新建目录mylib, 同时添加自定义api文件math.zig内容如下:

pub fn add(a: u32, b:u32) u32 {
    return a + b;
}

注意fn之前必须添加pub 否则该函数将无法导出被调用
在main.zig中添加调用代码如下:

const std = @import("std");
const math = @import("../mylib/math.zig");
pub fn main() !void {
    // Prints to stderr (it's a shortcut based on `std.io.getStdErr()`)
    std.debug.print("All your {s} are belong to us.\n", .{"codebase"});
    var ret = math.add(2 ,3);
    std.debug.print("ret: {d}\n", .{ret});
}

再次使用zig build run编译运行,出现错误
error: import of file outside package path: '../mylib/math.zig'
提示导入的文件超出了包的路径范围, 把mylib移动至src目录下,新的项目结构如下:

├── build.zig
└── src
    ├── main.zig
    └── mylib
        └── math.zig

再次编译运行

All your codebase are belong to us.
ret: 5

自定义api运行成功。

发表回复