저는 단지 뭔가 다른 것을 개발하고 싶을 뿐입니다. 근데 뭐? 게임, 그래픽, 사운드 처리?
분명히 당신은 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!
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3