> 백엔드 개발 > C++ > 본문

급격한 변경! C 할 수 있나요?

WBOY
풀어 주다: 2024-07-17 03:48:39
원래의
560명이 탐색했습니다.

Zig! Can you C?

그냥 뭔가 다른 것을 개발하고 싶어요. 하지만 뭐? 게임, 그래픽, 사운드 프로세싱?
분명히 당신은 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:dev.to
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿