Tu código es correcto y zig ya incluye las librerias de C para multiples plataformas. El problema es que para poder hacer uso de cImport
y poder importar stdio
es necesario enlazar libc explícitamente.
Partiendo de tu código, al que guardaremos como test.zig
para el ejemplo:
test.zig
const c = @cImport(@cInclude("stdio.h"));
pub fn main() void {
_ = c.printf("Hola Mundo");
}
Compilando directamente desde la linea de comandos
En este caso debes usar la opción -lc
/--library c
:
$ zig run test.zig -lc
$ zig run test.zig --library c
Exactamente igual si estás compilando a un ejecutable:
$ zig build-exe test.zig -lc
$ ./test
$ zig build-exe test.zig --library c
$ ./test
Puedes probarlo online (observa el uso de la opción -lc
en el compilador):
https://zig.godbolt.org/z/h5aWEGsrd
Usando Zig Build System
En este caso debemos usar exe.linkLibC()
en nuestro build.zig, para nuestro ejemplo:
build.zig
const std = @import("std");
pub fn build(b: *std.Build) void {
const exe = b.addExecutable(.{
.name = "test",
.root_source_file = b.path("test.zig"),
.target = b.host,
});
exe.linkLibC();
b.installArtifact(exe);
}
con lo que podemos construir (y posteriormente ejecutar) con:
$ zig build --summary all
$ ./zig-out/bin/test
std