我只是想开发一些不同的东西。但什么?游戏、图形、声音处理?
你肯定会说 Rust!是的,用 Rust 做了很多事情。但也许C?
噢...不...
还记得分段错误吗?
您将如何管理依赖关系?
好的,所以尝试在 ZIG 中使用一些 C 库!会有多难?让我们来看看。
尝试使用 raylib 编写简单的应用程序。
$ mkdir ray_test_zig $ cd ray_test_zig $ zig init-exe
有一个项目。尝试运行吗?
$ zig build run
是的,它正在工作。
我们需要以某种方式获取并包含 raylib。
Zig 使用 zon 来获取依赖项。它可以与 C 库一起使用吗?查出!
我们需要提供库的位置!这里是:
创建build.zig.zon文件。
.{ .name = "ray_test_zig", .version = "0.0.1", .dependencies = .{ .raylib = .{ .url = "https://github.com/raysan5/raylib/archive/refs/tags/5.0.tar.gz", }, }, }
尝试构建项目?
$ zig build
这是什么?
Fetch Packages... raylib... ./ray_test_zig/build.zig.zon:7:20: error: url field is missing corresponding hash field .url = "https://github.com/raysan5/raylib/archive/refs/tags/5.0.tar.gz", ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ note: expected .hash = "1220c28847ca8e8756734ae84355802b764c9d9cf4de057dbc6fc2b15c56e726f27b",
好吧,zon 需要一个哈希值,以防万一有人试图破解计算机。再次:
.{ .name = "ray_test_zig", .version = "0.0.1", .dependencies = .{ .raylib = .{ .url = "https://github.com/raysan5/raylib/archive/refs/tags/5.0.tar.gz", .hash = "1220c28847ca8e8756734ae84355802b764c9d9cf4de057dbc6fc2b15c56e726f27b", }, }, }
再试一次:
$ zig build
有用!哇哦!就是这样?
不!我们需要告诉 zig 在构建过程中包含 raylib!
现在我们将编辑build.zig。就在第 ~30 行上方,我们有 b.installArtifact(exe);
在该行之前我们需要添加:
const raylib = b.dependency("raylib", .{ .target = target, .optimize = optimize, }); exe.installLibraryHeaders(raylib.artifact("raylib")); exe.linkLibrary(raylib.artifact("raylib"));
我们正在告诉 zig 头文件所在位置,并使用 raylib 链接出可执行文件。
有效吗?让我们检查!
$ zig build
我的天啊!看起来 raylib 发生了一些事情。编译通过了吗?
让我们将一个简单的示例从 raylib 移植到 zig。
在 src/main.zig 中:
const std = @import("std"); const ray = @cImport({ @cInclude("raylib.h"); }); pub fn main() !void { ray.InitWindow(800, 450, "Hey ZIG"); defer ray.CloseWindow(); while (!ray.WindowShouldClose()) { ray.BeginDrawing(); ray.ClearBackground(ray.RAYWHITE); ray.DrawText("Congrats! You created your first window!", 190, 200, 20, ray.LIGHTGRAY); ray.EndDrawing(); } }
$ zig build
没有错误?伟大的!
$ zig build run
我们得到了 raylib 窗口!
如你看到的!只需一行代码,raylib 就可以像原生 lib 一样工作!
所以是的! Zig 可以 C!
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3