From c8b8f0ea13ee48db929e1340ee9512974ed986ee Mon Sep 17 00:00:00 2001 From: Andrew Kelley Date: Tue, 1 Dec 2020 11:28:44 -0700 Subject: [PATCH] COFF linking: fix incorrectly passing .dll instead of .lib commit 9d1816111d1d30e18b8cb43a4aa31c194fb204c4 used the "output path" as the path for passing shared library artifact paths to the Zig CLI. For Windows, this was incorrect because it would pass the .dll instead of the .lib file. This commit passes the "output lib path" instead, which makes it pass the .lib path in case of a .dll on Windows. This way the linker does not complain and say, "bad file type. Did you specify a DLL instead of an import library?" --- lib/std/build.zig | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/lib/std/build.zig b/lib/std/build.zig index d23c5b2865..5a40a87350 100644 --- a/lib/std/build.zig +++ b/lib/std/build.zig @@ -1429,24 +1429,24 @@ pub const LibExeObjStep = struct { self.out_lib_filename = self.out_filename; } else if (self.version) |version| { if (target.isDarwin()) { - self.major_only_filename = self.builder.fmt("lib{}.{d}.dylib", .{ + self.major_only_filename = self.builder.fmt("lib{s}.{d}.dylib", .{ self.name, version.major, }); - self.name_only_filename = self.builder.fmt("lib{}.dylib", .{self.name}); + self.name_only_filename = self.builder.fmt("lib{s}.dylib", .{self.name}); self.out_lib_filename = self.out_filename; } else if (target.os.tag == .windows) { - self.out_lib_filename = self.builder.fmt("{}.lib", .{self.name}); + self.out_lib_filename = self.builder.fmt("{s}.lib", .{self.name}); } else { - self.major_only_filename = self.builder.fmt("lib{}.so.{d}", .{ self.name, version.major }); - self.name_only_filename = self.builder.fmt("lib{}.so", .{self.name}); + self.major_only_filename = self.builder.fmt("lib{s}.so.{d}", .{ self.name, version.major }); + self.name_only_filename = self.builder.fmt("lib{s}.so", .{self.name}); self.out_lib_filename = self.out_filename; } } else { if (target.isDarwin()) { self.out_lib_filename = self.out_filename; } else if (target.os.tag == .windows) { - self.out_lib_filename = self.builder.fmt("{}.lib", .{self.name}); + self.out_lib_filename = self.builder.fmt("{s}.lib", .{self.name}); } else { self.out_lib_filename = self.out_filename; } @@ -1977,7 +1977,7 @@ pub const LibExeObjStep = struct { try zig_args.append(other.getOutputPath()); }, .Lib => { - const full_path_lib = other.getOutputPath(); + const full_path_lib = other.getOutputLibPath(); try zig_args.append(full_path_lib); if (other.is_dynamic and !self.target.isWindows()) {