그냥 뭔가 다른 것을 개발하고 싶어요. 하지만 뭐? 게임, 그래픽, 사운드 프로세싱?
분명히 당신은 Rust라고 말할 것입니다! 네, Rust에서는 많은 일을 했습니다. 그런데 아마도 C?
아아... 안 돼...
분할 오류를 기억하시나요?
종속성을 어떻게 관리할 예정인가요?
좋아, 그럼 ZIG에서 C 라이브러리를 사용해 보세요! 얼마나 힘들까요? 어디 보자.
Raylib를 사용하여 간단한 앱을 작성해 보세요.
$ mkdir ray_test_zig $ cd ray_test_zig $ zig init-exe
프로젝트가 생겼습니다. 달려볼까?
$ zig build run
네, 작동하고 있습니다.
어떻게든 raylib를 가져와서 포함해야 합니다.
Zig는 zon을 사용하여 종속성을 가져옵니다. C 라이브러리에서 작동합니까? 알아보세요!
lib가 어디에 있는지 제공해야 합니다! 여기 있습니다:
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"));
헤더 파일이 있는 위치를 zig로 알려주고 실행 파일을 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 창이 생겼습니다!
보시다시피! 단 한 줄의 코드와 raylib가 네이티브 lib처럼 작동합니다!
그래요! 지그캔C!
위 내용은 급격한 변경! C 할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!