何か違うものを開発したいだけです。でも何?ゲーム、グラフィックス、サウンド処理?
きっと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
効果あります!うわー!それだけですか?
いいえ!ビルド中に raylib を含めるよう zig に指示する必要があります!
ここで 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"));
ヘッダー ファイルの場所をジグに伝え、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 ウィンドウを入手しました!
ご覧のように!たった 1 行のコードと raylib がネイティブ ライブラリのように動作します!
そうだね!ジグキャンC!
以上がジグ! Cできますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。