「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > ジグ! Cできますか?

ジグ! Cできますか?

2024 年 8 月 5 日に公開
ブラウズ:910

Zig! Can you C?

何か違うものを開発したいだけです。でも何?ゲーム、グラフィックス、サウンド処理?
きっとRustと言うでしょう!はい、Rust で多くのことを行いました。でも多分C?

ああ...いやぁ...
セグメンテーション違反を覚えていますか?
依存関係をどのように管理しますか?

OK、それでは 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!

リリースステートメント この記事は次の場所に転載されています: https://dev.to/fazibear/zig-can-you-c-3adl 侵害がある場合は、[email protected] に連絡して削除してください。
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3