I’m trying to link a prebuilt .lib file using Zig’s new build system on Windows and I’m getting closer, but I’ve run into an issue that may be related to how Zig handles linking.
My main questions are:
Can Zig use an existing MSVC-generated .lib directly?
Does Zig/LLD fully support linking against MSVC libraries?
Is it possible to make Zig use the MSVC linker instead?
Or does the library need to be rebuilt in a way that’s compatible with Zig’s toolchain?
Relevant details:
Zig version: 0.17.0-dev.87+9b177a7d2
Target: Windows
Library type: static
Any guidance on how Zig handles MSVC .lib files with the new build system would be appreciated.
Build snippet
const std = @import("std");
const targets = [_]std.Target.Query{
.{ .cpu_arch = .x86_64, .os_tag = .windows, .abi = .msvc },
.{ .cpu_arch = .aarch64, .os_tag = .windows, .abi = .msvc },
};
pub fn build(b: *std.Build) void {
const target = b.standardTargetOptions(.{ .whitelist = &targets });
const optimize = b.standardOptimizeOption(.{});
// const tsk_dep = switch (.{target.result.cpu.arch, target.result.os.tag}) {
// .{.x86_64, .windows} => b.lazyDependency("tsk-windows-x86_64", .{}) orelse return,
// .{.aarch64, .windows} => b.lazyDependency("tsk-windows-aarch64", .{}) orelse return,
// else => unreachable,
// }; // ik this is wrong, is there something like this in zig
const tsk_dep = switch (target.result.cpu.arch) {
.x86_64 => b.lazyDependency("tsk-windows-x86_64", .{}) orelse return,
.aarch64 => b.lazyDependency("tsk-windows-aarch64", .{}) orelse return,
else => unreachable,
};
const tsk_lib_path = tsk_dep.path("x64/Release_NoLibs/libtsk.lib");
const tsk_tc = b.addTranslateC(.{
.root_source_file = tsk_dep.path("include/tsk/libtsk.h"),
.target = target,
.optimize = optimize,
.link_libc = true,
});
tsk_tc.addIncludePath(tsk_dep.path("include"));
tsk_tc.defineCMacro("_MSC_VER", "1950");
tsk_tc.defineCMacro("__INTRIN_H", null);
tsk_tc.defineCMacro("_MODE_T_", null);
const tsk_mod = tsk_tc.createModule();
tsk_mod.addObjectFile(tsk_lib_path);
const mod = b.addModule("rere_zig", .{
.root_source_file = b.path("src/root.zig"),
.target = target,
});
const exe = b.addExecutable(.{
.name = "rere_zig",
.root_module = b.createModule(.{
.root_source_file = b.path("src/main.zig"),
.target = target,
.optimize = optimize,
.imports = &.{
.{ .name = "rere_zig", .module = mod },
.{
.name = "tsk",
.module = tsk_mod,
},
},
}),
});
const run_step = b.step("run", "Run the app");
const run_cmd = b.addRunArtifact(exe);
run_step.dependOn(&run_cmd.step);
run_cmd.step.dependOn(b.getInstallStep());
const out_dir = b.fmt("{s}-{s}", .{ @tagName(target.result.cpu.arch), @tagName(target.result.os.tag) });
const target_output = b.addInstallArtifact(exe, .{
.dest_dir = .{
.override = .{
.custom = out_dir,
},
},
});
b.getInstallStep().dependOn(&target_output.step);
}
Full error
zig build --verbose-link
lld-link -lldmingw -ERRORLIMIT:0 -NOLOGO -DEBUG -PDB:.zig-cache\o\283771215e72ef80cbf14bf11a2ead6a\build.pdb -PDBALTPATH:build.pdb -MLLVM:-float-abi=hard -STACK:16777216 -BASE:5368709120 -BUILD-ID:NO -MACHINE:X64 -OUT:.zig-cache\o\283771215e72ef80cbf14bf11a2ead6a\build.exe .zig-cache\o\283771215e72ef80cbf14bf11a2ead6a\build_zcu.obj -SUBSYSTEM:console,6.0 -NODEFAULTLIB -ENTRY:wWinMainCRTStartup C:\Users\AUTO\AppData\Local\zig\o\531076a137c91278755243eb07e7a165\compiler_rt.lib C:\Users\AUTO\AppData\Local\zig\o\8823749cfd2a44850521c412d74df968\ntdll.lib C:\Users\AUTO\AppData\Local\zig\o\2d8f1c469679c6fd6b58bee1df84a475\kernel32.lib
install
└─ install rere_zig
└─ compile exe rere_zig Debug native 1 errors
error: lld-link: x64\Release_NoLibs\logical_img.obj: is not a native COFF file. Recompile without /GL?
error: lld-link -lldmingw -ERRORLIMIT:0 -NOLOGO -DEBUG -PDB:.zig-cache\o\a90f1fc69533bd7e16fcd71f55c62722\rere_zig.pdb -PDBALTPATH:rere_zig.pdb -MLLVM:-float-abi=hard -STACK:16777216 -BASE:5368709120 -BUILD-ID:NO -MACHINE:X64 -OUT:.zig-cache\o\a90f1fc69533bd7e16fcd71f55c62722\rere_zig.exe -IMPLIB:.zig-cache\o\a90f1fc69533bd7e16fcd71f55c62722\rere_zig.lib D:\all\prog_elec_phil\projects\ReRecycleBin\mytry\zig\zig-pkg\N-V-__8AABE9OUXYOg28Vmh6B6j5dE96aZN5Uwe5yGM8nCpF\x64\Release_NoLibs\libtsk.lib .zig-cache\o\a90f1fc69533bd7e16fcd71f55c62722\rere_zig_zcu.obj -SUBSYSTEM:console,6.0 -ALTERNATENAME:__image_base__=__ImageBase C:\Users\AUTO\AppData\Local\zig\o\717ef9067c92fcb01f3ef26fd2505baf\crt2.obj C:\Users\AUTO\AppData\Local\zig\o\c4059443dc00ce5cb4a43f9ebaa987a2\libmingw32.lib C:\Users\AUTO\AppData\Local\zig\o\3be3ee489409b43a7626f61f5c71a1f7\compiler_rt.lib C:\Users\AUTO\AppData\Local\zig\o\d0b3410a2fb5f645497e9077952ec184\api-ms-win-crt-conio-l1-1-0.lib C:\Users\AUTO\AppData\Local\zig\o\3ece3820cc5917a382f2eb19b6660965\api-ms-win-crt-convert-l1-1-0.lib C:\Users\AUTO\AppData\Local\zig\o\b2c76beaf971a2484bc634c8aa1bb236\api-ms-win-crt-environment-l1-1-0.lib C:\Users\AUTO\AppData\Local\zig\o\1cf839b079529db9a572ff9e79c73b59\api-ms-win-crt-filesystem-l1-1-0.lib C:\Users\AUTO\AppData\Local\zig\o\a6925285f97c6c2f233f0fa06c0dabc5\api-ms-win-crt-heap-l1-1-0.lib C:\Users\AUTO\AppData\Local\zig\o\2306687bbc9f53d9bfd0a7b38d0e7e49\api-ms-win-crt-locale-l1-1-0.lib C:\Users\AUTO\AppData\Local\zig\o\1e0eb80ff639efa6745d9bc4d6d3d3dc\api-ms-win-crt-math-l1-1-0.lib C:\Users\AUTO\AppData\Local\zig\o\5df73fa64f22e87ec996fb6f70b7b0cc\api-ms-win-crt-multibyte-l1-1-0.lib C:\Users\AUTO\AppData\Local\zig\o\0bb1f7f480d80ac7c14e9fddfbcb1010\api-ms-win-crt-private-l1-1-0.lib C:\Users\AUTO\AppData\Local\zig\o\9e8b95dac3948e3c2f0b530e56ba723c\api-ms-win-crt-process-l1-1-0.lib C:\Users\AUTO\AppData\Local\zig\o\2b14e6a828459434e763f4775e861c4d\api-ms-win-crt-runtime-l1-1-0.lib C:\Users\AUTO\AppData\Local\zig\o\744e801df18d9a36ef9c0a34d56caab9\api-ms-win-crt-stdio-l1-1-0.lib C:\Users\AUTO\AppData\Local\zig\o\9b13a8139772426a6ede001663eda57c\api-ms-win-crt-string-l1-1-0.lib C:\Users\AUTO\AppData\Local\zig\o\4731b932810e604e32a33b39b8f89bc0\api-ms-win-crt-time-l1-1-0.lib C:\Users\AUTO\AppData\Local\zig\o\835ae4401fbd66252c626b11c790c661\api-ms-win-crt-utility-l1-1-0.lib C:\Users\AUTO\AppData\Local\zig\o\fbd009db99332a266ef75ebb37df2359\advapi32.lib C:\Users\AUTO\AppData\Local\zig\o\2d8f1c469679c6fd6b58bee1df84a475\kernel32.lib C:\Users\AUTO\AppData\Local\zig\o\8823749cfd2a44850521c412d74df968\ntdll.lib C:\Users\AUTO\AppData\Local\zig\o\8e18e55227f085e391b1dd4e16712065\shell32.lib C:\Users\AUTO\AppData\Local\zig\o\9f72bdd9c99453ccafb28bb2b355c5dc\user32.lib
error: 1 compilation errors
failed command: "C:\\Users\\AUTO\\terminal\\zigup-x86_64-windows\\zig\\0.17.0-dev.87+9b177a7d2\\files\\zig.exe" build-exe -ODebug --dep rere_zig --dep tsk "-Mroot=D:\\all\\prog_elec_phil\\projects\\ReRecycleBin\\mytry\\zig\\src\\main.zig" "-Mrere_zig=D:\\all\\prog_elec_phil\\projects\\ReRecycleBin\\mytry\\zig\\src\\root.zig" "D:\\all\\prog_elec_phil\\projects\\ReRecycleBin\\mytry\\zig\\zig-pkg\\N-V-__8AABE9OUXYOg28Vmh6B6j5dE96aZN5Uwe5yGM8nCpF\\x64\\Release_NoLibs\\libtsk.lib" -ODebug "-Mtsk=.zig-cache\\o\\bf19dd510d14121b84d6cc254a9cba84\\libtsk.zig" -lc --verbose-link --cache-dir .zig-cache --global-cache-dir "C:\\Users\\AUTO\\AppData\\Local\\zig" --name rere_zig --zig-lib-dir "C:\\Users\\AUTO\\terminal\\zigup-x86_64-windows\\zig\\0.17.0-dev.87+9b177a7d2\\files\\lib\\" --listen=-
Build Summary: 1/4 steps succeeded (1 failed)
install transitive failure
└─ install rere_zig transitive failure
└─ compile exe rere_zig Debug native 1 errors
error: the following build command failed with exit code 1:
.zig-cache\o\283771215e72ef80cbf14bf11a2ead6a\build.exe C:\Users\AUTO\terminal\zigup-x86_64-windows\zig\0.17.0-dev.87+9b177a7d2\files\zig.exe C:\Users\AUTO\terminal\zigup-x86_64-windows\zig\0.17.0-dev.87+9b177a7d2\files\lib D:\all\prog_elec_phil\projects\ReRecycleBin\mytry\zig .zig-cache C:\Users\AUTO\AppData\Local\zig --seed 0xebccb740 -Z27ed8d99addb4f25 --verbose-link
D:\all\prog_elec_phil\projects\ReRecycleBin\mytry\zig> zig build --verbose-link
lld-link -lldmingw -ERRORLIMIT:0 -NOLOGO -DEBUG -PDB:.zig-cache\o\20c0cd59617305bd714664beb5622b30\build.pdb -PDBALTPATH:build.pdb -MLLVM:-float-abi=hard -STACK:16777216 -BASE:5368709120 -BUILD-ID:NO -MACHINE:X64 -OUT:.zig-cache\o\20c0cd59617305bd714664beb5622b30\build.exe .zig-cache\o\20c0cd59617305bd714664beb5622b30\build_zcu.obj -SUBSYSTEM:console,6.0 -NODEFAULTLIB -ENTRY:wWinMainCRTStartup C:\Users\AUTO\AppData\Local\zig\o\531076a137c91278755243eb07e7a165\compiler_rt.lib C:\Users\AUTO\AppData\Local\zig\o\8823749cfd2a44850521c412d74df968\ntdll.lib C:\Users\AUTO\AppData\Local\zig\o\2d8f1c469679c6fd6b58bee1df84a475\kernel32.lib
install
└─ install rere_zig
└─ compile exe rere_zig Debug native 1 errors
error: lld-link: x64\Release_NoLibs\logical_img.obj: is not a native COFF file. Recompile without /GL?
error: lld-link -lldmingw -ERRORLIMIT:0 -NOLOGO -DEBUG -PDB:.zig-cache\o\a90f1fc69533bd7e16fcd71f55c62722\rere_zig.pdb -PDBALTPATH:rere_zig.pdb -MLLVM:-float-abi=hard -STACK:16777216 -BASE:5368709120 -BUILD-ID:NO -MACHINE:X64 -OUT:.zig-cache\o\a90f1fc69533bd7e16fcd71f55c62722\rere_zig.exe -IMPLIB:.zig-cache\o\a90f1fc69533bd7e16fcd71f55c62722\rere_zig.lib D:\all\prog_elec_phil\projects\ReRecycleBin\mytry\zig\zig-pkg\N-V-__8AABE9OUXYOg28Vmh6B6j5dE96aZN5Uwe5yGM8nCpF\x64\Release_NoLibs\libtsk.lib .zig-cache\o\a90f1fc69533bd7e16fcd71f55c62722\rere_zig_zcu.obj -SUBSYSTEM:console,6.0 -ALTERNATENAME:__image_base__=__ImageBase C:\Users\AUTO\AppData\Local\zig\o\717ef9067c92fcb01f3ef26fd2505baf\crt2.obj C:\Users\AUTO\AppData\Local\zig\o\c4059443dc00ce5cb4a43f9ebaa987a2\libmingw32.lib C:\Users\AUTO\AppData\Local\zig\o\3be3ee489409b43a7626f61f5c71a1f7\compiler_rt.lib C:\Users\AUTO\AppData\Local\zig\o\d0b3410a2fb5f645497e9077952ec184\api-ms-win-crt-conio-l1-1-0.lib C:\Users\AUTO\AppData\Local\zig\o\3ece3820cc5917a382f2eb19b6660965\api-ms-win-crt-convert-l1-1-0.lib C:\Users\AUTO\AppData\Local\zig\o\b2c76beaf971a2484bc634c8aa1bb236\api-ms-win-crt-environment-l1-1-0.lib C:\Users\AUTO\AppData\Local\zig\o\1cf839b079529db9a572ff9e79c73b59\api-ms-win-crt-filesystem-l1-1-0.lib C:\Users\AUTO\AppData\Local\zig\o\a6925285f97c6c2f233f0fa06c0dabc5\api-ms-win-crt-heap-l1-1-0.lib C:\Users\AUTO\AppData\Local\zig\o\2306687bbc9f53d9bfd0a7b38d0e7e49\api-ms-win-crt-locale-l1-1-0.lib C:\Users\AUTO\AppData\Local\zig\o\1e0eb80ff639efa6745d9bc4d6d3d3dc\api-ms-win-crt-math-l1-1-0.lib C:\Users\AUTO\AppData\Local\zig\o\5df73fa64f22e87ec996fb6f70b7b0cc\api-ms-win-crt-multibyte-l1-1-0.lib C:\Users\AUTO\AppData\Local\zig\o\0bb1f7f480d80ac7c14e9fddfbcb1010\api-ms-win-crt-private-l1-1-0.lib C:\Users\AUTO\AppData\Local\zig\o\9e8b95dac3948e3c2f0b530e56ba723c\api-ms-win-crt-process-l1-1-0.lib C:\Users\AUTO\AppData\Local\zig\o\2b14e6a828459434e763f4775e861c4d\api-ms-win-crt-runtime-l1-1-0.lib C:\Users\AUTO\AppData\Local\zig\o\744e801df18d9a36ef9c0a34d56caab9\api-ms-win-crt-stdio-l1-1-0.lib C:\Users\AUTO\AppData\Local\zig\o\9b13a8139772426a6ede001663eda57c\api-ms-win-crt-string-l1-1-0.lib C:\Users\AUTO\AppData\Local\zig\o\4731b932810e604e32a33b39b8f89bc0\api-ms-win-crt-time-l1-1-0.lib C:\Users\AUTO\AppData\Local\zig\o\835ae4401fbd66252c626b11c790c661\api-ms-win-crt-utility-l1-1-0.lib C:\Users\AUTO\AppData\Local\zig\o\fbd009db99332a266ef75ebb37df2359\advapi32.lib C:\Users\AUTO\AppData\Local\zig\o\2d8f1c469679c6fd6b58bee1df84a475\kernel32.lib C:\Users\AUTO\AppData\Local\zig\o\8823749cfd2a44850521c412d74df968\ntdll.lib C:\Users\AUTO\AppData\Local\zig\o\8e18e55227f085e391b1dd4e16712065\shell32.lib C:\Users\AUTO\AppData\Local\zig\o\9f72bdd9c99453ccafb28bb2b355c5dc\user32.lib
error: 1 compilation errors
failed command: "C:\\Users\\AUTO\\terminal\\zigup-x86_64-windows\\zig\\0.17.0-dev.87+9b177a7d2\\files\\zig.exe" build-exe -ODebug --dep rere_zig --dep tsk "-Mroot=D:\\all\\prog_elec_phil\\projects\\ReRecycleBin\\mytry\\zig\\src\\main.zig" "-Mrere_zig=D:\\all\\prog_elec_phil\\projects\\ReRecycleBin\\mytry\\zig\\src\\root.zig" "D:\\all\\prog_elec_phil\\projects\\ReRecycleBin\\mytry\\zig\\zig-pkg\\N-V-__8AABE9OUXYOg28Vmh6B6j5dE96aZN5Uwe5yGM8nCpF\\x64\\Release_NoLibs\\libtsk.lib" -ODebug "-Mtsk=.zig-cache\\o\\bf19dd510d14121b84d6cc254a9cba84\\libtsk.zig" -lc --verbose-link --cache-dir .zig-cache --global-cache-dir "C:\\Users\\AUTO\\AppData\\Local\\zig" --name rere_zig --zig-lib-dir "C:\\Users\\AUTO\\terminal\\zigup-x86_64-windows\\zig\\0.17.0-dev.87+9b177a7d2\\files\\lib\\" --listen=-
Build Summary: 1/4 steps succeeded (1 failed)
install transitive failure
└─ install rere_zig transitive failure
└─ compile exe rere_zig Debug native 1 errors
error: the following build command failed with exit code 1:
.zig-cache\o\20c0cd59617305bd714664beb5622b30\build.exe C:\Users\AUTO\terminal\zigup-x86_64-windows\zig\0.17.0-dev.87+9b177a7d2\files\zig.exe C:\Users\AUTO\terminal\zigup-x86_64-windows\zig\0.17.0-dev.87+9b177a7d2\files\lib D:\all\prog_elec_phil\projects\ReRecycleBin\mytry\zig .zig-cache C:\Users\AUTO\AppData\Local\zig --seed 0xf10aae9e -Ze020e3c942e0c3f2 --verbose-link
if you want the prebuilt library, its a the slueth kit buid ci on github, here’s the link Releases · neo2043/comp · GitHub