我只是想開發一些不同的東西。但什麼?遊戲、圖形、聲音處理?
你一定會說 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