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