Heim > Backend-Entwicklung > C++ > Hauptteil

Zick! Kannst du C?

WBOY
Freigeben: 2024-07-17 03:48:39
Original
559 Leute haben es durchsucht

Zig! Can you 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
Nach dem Login kopieren

Habe ein Projekt. Versuchen Sie zu rennen?

$ zig build run
Nach dem Login kopieren
Nach dem Login kopieren

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",
        },
    },
}
Nach dem Login kopieren

Versuchen Sie, ein Projekt zu erstellen?

$ zig build
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

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",
Nach dem Login kopieren

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",
        },
    },
}
Nach dem Login kopieren

Versuchen Sie es noch einmal:

$ zig build
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

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"));

Nach dem Login kopieren

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
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

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();
    }
}
Nach dem Login kopieren
$ zig build
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Keine Fehler? Großartig!

$ zig build run
Nach dem Login kopieren
Nach dem Login kopieren

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!

Quelle:dev.to
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage