Je veux juste développer quelque chose de différent. Mais quoi? Jeu, graphisme, traitement du son ?
Vous direz sûrement Rust ! Oui, j'ai fait beaucoup de choses dans Rust. Mais peut-être C ?
Ohhh... Non...
Vous vous souvenez d'un défaut de segmentation ?
Comment allez-vous gérer les dépendances ?
OK, alors essayez d'utiliser une bibliothèque C dans ZIG ! À quel point ce sera dur ? Voyons.
Essayez d'écrire une application simple en utilisant Raylib.
$ mkdir ray_test_zig $ cd ray_test_zig $ zig init-exe
J'ai un projet. Essayez de courir ?
$ zig build run
Oui, ça marche.
Nous devons récupérer et inclure Raylib d'une manière ou d'une autre.
Zig utilise zon pour récupérer les dépendances. Est-ce que ça marche avec les bibliothèques C ? Découvrir!
Nous devons indiquer où se trouve la bibliothèque ! C'est ici:
Créez le fichier 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", }, }, }
Essayer de créer un projet ?
$ zig build
Ce que c'est?
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",
Ok, zon attend un hachage, juste au cas où quelqu'un essaierait de pirater l'ordinateur. Encore une fois:
.{ .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", }, }, }
Réessayez :
$ zig build
Ça marche! Waouh ! C'est ça?
Non! Nous devons dire à zig d'inclure Raylib lors de la construction !
Nous allons maintenant éditer build.zig. Juste au-dessus de la ligne ~30, nous avons b.installArtifact(exe);
Avant cette ligne, nous devons ajouter :
const raylib = b.dependency("raylib", .{ .target = target, .optimize = optimize, }); exe.installLibraryHeaders(raylib.artifact("raylib")); exe.linkLibrary(raylib.artifact("raylib"));
Nous indiquons à zig où se trouvent les fichiers d'en-tête et lions l'exécutable avec Raylib.
Est-ce que ça marche ? Allons vérifier!
$ zig build
OH MON DIEU! On dirait que quelque chose s'est produit avec Raylib. C'est compilé ?
Portons un exemple simple de Raylib vers zig.
Dans le 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
Aucune erreur ? Super!
$ zig build run
Nous avons la fenêtre Raylib !
Comme vous pouvez le voir! Une seule ligne de code et Raylib fonctionne comme une bibliothèque native !
Alors oui ! Zig peut C!
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3