Heim >Backend-Entwicklung >C++ >Zick! Kannst du C?
Ich möchte einfach etwas anderes entwickeln. Aber was? Spiel, Grafik, Soundverarbeitung?
Sicherlich werden Sie Rust sagen! Ja, ich habe eine Menge Dinge in Rust gemacht. Aber vielleicht C?
Ohhh... Nein...
Erinnern Sie sich an den Segmentierungsfehler?
Wie gehen Sie mit Abhängigkeiten um?
OK, versuchen Sie also, eine C-Bibliothek in ZIG zu verwenden! Wie schwer wird es sein? Mal sehen.
Versuchen Sie, eine einfache App mit Raylib zu schreiben.
$ mkdir ray_test_zig $ cd ray_test_zig $ zig init-exe
Habe ein Projekt. Versuchen Sie zu rennen?
$ zig build run
Ja, es funktioniert.
Wir müssen Raylib irgendwie abrufen und einbinden.
Zig verwendet zon, um Abhängigkeiten abzurufen. Funktioniert es mit C-Bibliotheken? Finden Sie es heraus!
Wir müssen angeben, wo sich die Bibliothek befindet! Hier ist es:
Build.zig.zon-Datei erstellen.
.{ .name = "ray_test_zig", .version = "0.0.1", .dependencies = .{ .raylib = .{ .url = "https://github.com/raysan5/raylib/archive/refs/tags/5.0.tar.gz", }, }, }
Versuchen Sie, ein Projekt zu erstellen?
$ zig build
Was ist das?
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 erwartet einen Hash, nur für den Fall, dass jemand versucht, den Computer auszuhacken. Noch einmal:
.{ .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", }, }, }
Versuchen Sie es noch einmal:
$ zig build
Es funktioniert! Woooow! Das ist es?
Nein! Wir müssen zig anweisen, Raylib während des Builds einzubinden!
Jetzt bearbeiten wir build.zig. Direkt über Zeile ~30 haben wir b.installArtifact(exe);
Vor dieser Zeile müssen wir Folgendes hinzufügen:
const raylib = b.dependency("raylib", .{ .target = target, .optimize = optimize, }); exe.installLibraryHeaders(raylib.artifact("raylib")); exe.linkLibrary(raylib.artifact("raylib"));
Wir teilen Ihnen im Zickzack mit, wo sich die Header-Dateien befinden, und verknüpfen die ausführbare Datei mit Raylib.
Funktioniert es? Schauen wir mal nach!
$ zig build
OMG! Es sieht so aus, als wäre etwas mit Raylib passiert. Es ist kompiliert?
Lassen Sie uns ein einfaches Beispiel von Raylib nach Zig portieren.
In der 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
Keine Fehler? Großartig!
$ zig build run
Wir haben das Raylib-Fenster!
Wie Sie sehen! Nur eine Codezeile und Raylib funktioniert wie eine native Bibliothek!
Also ja! Zick kann C!
Das obige ist der detaillierte Inhalt vonZick! Kannst du C?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!