
我只是想开发一些不同的东西。但什么?游戏、图形、声音处理?
你肯定会说 Rust!是的,用 Rust 做了很多事情。但也许是C?
噢...不...
还记得分段错误吗?
您将如何管理依赖关系?
好的,所以尝试在 ZIG 中使用一些 C 库!会有多难?让我们看看。
尝试使用 raylib 编写简单的应用程序。
1 2 3 | $ mkdir ray_test_zig
$ cd ray_test_zig
$ zig init-exe
|
登录后复制
有一个项目。尝试跑步吗?
是的,它正在工作。
我们需要以某种方式获取并包含 raylib。
Zig 使用 zon 来获取依赖项。它可以与 C 库一起使用吗?找出来!
我们需要提供库的位置!这是:
创建 build.zig.zon 文件。
1 2 3 4 5 6 7 8 9 10 | .{
.name = "ray_test_zig" ,
.version = "0.0.1" ,
.dependencies = .{
.raylib = .{
.url = "https://github.com/raysan5/raylib/archive/refs/tags/5.0.tar.gz" ,
},
},
}
|
登录后复制
尝试构建项目?
这是什么?
1 2 3 4 | 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 需要一个哈希值,以防万一有人试图破解计算机。再次:
1 2 3 4 5 6 7 8 9 10 11 | .{
.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 在构建过程中包含 raylib!
现在我们将编辑build.zig。就在第 ~30 行上方,我们有 b.installArtifact(exe);
在该行之前我们需要添加:
1 2 3 4 5 6 7 | const raylib = b.dependency( "raylib" , .{
.target = target,
.optimize = optimize,
});
exe.installLibraryHeaders(raylib.artifact( "raylib" ));
exe.linkLibrary(raylib.artifact( "raylib" ));
|
登录后复制
我们正在告诉 zig 头文件所在位置,并使用 raylib 链接出可执行文件。
有效吗?我们来检查一下!
天啊!看起来 raylib 发生了一些事情。编译好了吗?
让我们将一个简单的示例从 raylib 移植到 zig。
在 src/main.zig 中:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | 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();
}
}
|
登录后复制
没有错误吗?太棒了!
我们得到了 raylib 窗口!
如你看到的!只需一行代码,raylib 就可以像原生 lib 一样工作!
所以是的! Zig 可以 C!
以上是齐格!你可以C吗?的详细内容。更多信息请关注PHP中文网其他相关文章!