windows - 使用 Zig 编译器构建 C 代码时如何包含 (msvc) libc

标签 windows build libc zig

我最近发现了 zig 并发现它非常有趣。我现在正在尝试学习如何使用 zig 作为交叉编译器,并且以下构建和运行良好(在 Windows 上)

zig cc -Wno-everything src/ctest.c

但是,当我使用 build-exe 命令或构建脚本时,无法找到并链接 (Windows) libc

c:\zigctest>zig build

Zig is unable to provide a libc for the chosen target 'x86_64-unknown-windows-msvc'.
The target is non-native, so Zig also cannot use the native libc installation.
Choose a target which has a libc available, or provide a libc installation text file.
See `zig libc --help` for more details.
The following command exited with error code 1:
c:\zigctest\zig.exe build-exe --library c --c-source -Wno-everything C:\zigctest\src\ctest.c --cache-dir C:\zigctest\zig-cache --name ctest -target x86_64-windows-msvc --cache on
exec failed
C:\zigctest\lib\zig\std\build.zig:768:36: 0x7ff76fece654 in std.build.Builder::std.build.Builder.exec (build.obj)
                    std.debug.panic("exec failed")
...

如果我能看到 zig cc 的真正作用,也许我可以弄清楚(但 zig cc 似乎不允许使用 --verbose-cc 标志)。或者如何让 zig 与 Windows 上的 msvc(或任何其他可用的 libc)链接?为了完整起见,build.zig 脚本实际上是:

...
const cflags = [][]const u8{
"-Wno-everything",
};

const exe = b.addExecutable("ctest", null);
exe.linkSystemLibrary("c");
exe.setBuildMode(mode);
exe.setTarget(builtin.Arch.x86_64, .windows, .msvc);
exe.addCSourceFile("src/ctest.c",cflags);
...

最佳答案

以下是与此相关的问题:https://github.com/ziglang/zig/issues/514

一旦实现了此问题的 Windows libc 部分,您的示例就可以工作。在此之前,对于想要链接 libc 的 Windows 代码进行交叉编译将需要交叉编译环境。

关于windows - 使用 Zig 编译器构建 C 代码时如何包含 (msvc) libc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56792050/

相关文章:

c# - 用于自动化的 User32 API 自定义 PostMessage

c# - 检查用户是否是组的成员

java - 如何通过Ant编译jsoup?

c - 有没有不需要linux内核的libc项目

windows - 为什么要尝试打开一个 TOpenDialog 产生大量线程?

c++ - 从不同机器同时调用 CreateDirectory 或 CreateFile 时会发生什么?

build - 如果找不到工件,如何使 TeamCity 构建失败?

GRAILS --- 命令 grails war 和 gradle build 有什么区别?

libc - 为什么 libc 有两个版本号(在 Ubuntu 上)?

c - Linux 中标准库的头文件是如何安装的?