Как включить (msvc) libc при сборке кода c компилятором Zig - PullRequest
1 голос
/ 27 июня 2019

Я недавно обнаружил зиг и нахожу его очень интересным.Сейчас я пытаюсь узнать, как использовать zig в качестве кросс-компилятора, и следующая сборка работает нормально (в Windows)

zig cc -Wno-everything src/ctest.c

, однако, когда я использую команду build-exe или скрипт сборки,libc (Windows) не может быть найден и связан

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 связываться с msvc (или любым другим работающим libc) в Windows?Для полноты, скрипт 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);
...

1 Ответ

0 голосов
/ 06 июля 2019

Вот соответствующая проблема для этого: https://github.com/ziglang/zig/issues/514

Как только часть этой проблемы для Windows libc будет реализована, ваш пример будет работать.До этого кросс-компиляция для кода Windows, который хочет связать libc, требовала бы кросс-компиляции.

...