首页 > 后端开发 > C++ > 正文

齐格!你可以C吗?

WBOY
发布: 2024-07-17 03:48:39
原创
488 人浏览过

Zig! Can you C?

我只是想开发一些不同的东西。但什么?游戏、图形、声音处理?
你肯定会说 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!

以上是齐格!你可以C吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:dev.to
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!