首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >需要在zig中使用C库的帮助

需要在zig中使用C库的帮助
EN

Stack Overflow用户
提问于 2021-09-08 15:59:22
回答 1查看 212关注 0票数 0

我正在尝试将microUI库从C移植到zig。

我曾尝试使用此端口尝试https://gitdab.com/luna/zig-microui作为指南帖子,但似乎不起作用。

这是到目前为止我的尝试的一个细目:

MicroUI是一个非常简单的程序,由一个.h文件和一个.c文件组成。这两个文件都位于我的项目根目录下的"./microui“文件夹下。

我的build.zig:

代码语言:javascript
复制
const std = @import("std");

const c_args = [_][]const u8{
    "-Wall",
    "-std=c11",
    "-pedantic",
    // prevent sigill
    "-fno-sanitize=undefined",
};

pub fn build(b: *std.build.Builder) void {
    // Standard release options allow the person running `zig build` to select
    // between Debug, ReleaseSafe, ReleaseFast, and ReleaseSmall.
    const mode = b.standardReleaseOptions();

    const lib = b.addStaticLibrary("ZigMicroUI", "src/main.zig");
    lib.linkSystemLibrary("c");
    lib.linkLibC();
    lib.addIncludeDir("./microui");
    lib.addCSourceFile("microui/microui.c", &c_args);

    lib.setBuildMode(mode);
    lib.install();

    var main_tests = b.addTest("src/main.zig");
    main_tests.setBuildMode(mode);

    const test_step = b.step("test", "Run library tests");
    test_step.dependOn(&main_tests.step);
}

c.zig:

代码语言:javascript
复制
pub usingnamespace @cImport({
    @cInclude("microui.h");
});

Main.zig的相关部分:

代码语言:javascript
复制
const std = @import("std");
const testing = std.testing;
const c = @import("c.zig");

export fn begin_window() void {
   const ctx: c.mu_Context = null;
}

'zig build test‘的输出:

代码语言:javascript
复制
.\src\c.zig:1:20: error: C import failed
pub usingnamespace @cImport({
                   ^
.\src\c.zig:1:20: note: libc headers not available; compilation does not link against libc
pub usingnamespace @cImport({
                   ^
.\zig-cache\o\013eb3e1efd6fe219480e321f33592ae\cimport.h:1:10: note: 'microui.h' file not found
#include <microui.h>
         ^
.\src\main.zig:6:16: error: container 'c' has no member called 'mu_Context'
   const ctx: c.mu_Context = null;

如果有人能帮上忙的话,我觉得这一定是我遗漏的一些小东西。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-09-13 20:27:11

您还必须将配置添加到main_tests:

代码语言:javascript
复制
main_tests.linkLibC();
main_tests.addIncludeDir("microui");
main_tests.addCSourceFile("microui/microui.c", &c_args);

那么zig build test就可以工作了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69106290

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档