diff --git a/compiler/rustc_codegen_ssa/src/back/link.rs b/compiler/rustc_codegen_ssa/src/back/link.rs index ea75943d6f314..75a2a94a179b6 100644 --- a/compiler/rustc_codegen_ssa/src/back/link.rs +++ b/compiler/rustc_codegen_ssa/src/back/link.rs @@ -1809,9 +1809,9 @@ fn add_local_native_libraries( None => continue, }; match lib.kind { - NativeLibKind::Dylib | NativeLibKind::Unspecified => cmd.link_dylib(name), + NativeLibKind::Dylib | NativeLibKind::Unspecified => cmd.link_local_dylib(name), NativeLibKind::Framework => cmd.link_framework(name), - NativeLibKind::StaticNoBundle => cmd.link_staticlib(name), + NativeLibKind::StaticNoBundle => cmd.link_local_staticlib(name), NativeLibKind::StaticBundle => cmd.link_whole_staticlib(name, &search_path), NativeLibKind::RawDylib => { // FIXME(#58713): Proper handling for raw dylibs. diff --git a/compiler/rustc_codegen_ssa/src/back/linker.rs b/compiler/rustc_codegen_ssa/src/back/linker.rs index 77d8ab49ff258..00708deca7322 100644 --- a/compiler/rustc_codegen_ssa/src/back/linker.rs +++ b/compiler/rustc_codegen_ssa/src/back/linker.rs @@ -109,6 +109,12 @@ pub trait Linker { fn link_staticlib(&mut self, lib: Symbol); fn link_rlib(&mut self, lib: &Path); fn link_whole_rlib(&mut self, lib: &Path); + fn link_local_dylib(&mut self, lib: Symbol) { + self.link_dylib(lib) + } + fn link_local_staticlib(&mut self, lib: Symbol) { + self.link_staticlib(lib) + } fn link_whole_staticlib(&mut self, lib: Symbol, search_path: &[PathBuf]); fn include_path(&mut self, path: &Path); fn framework_path(&mut self, path: &Path); @@ -709,7 +715,7 @@ impl<'a> Linker for MsvcLinker<'a> { } fn link_dylib(&mut self, lib: Symbol) { - self.cmd.arg(&format!("{}.lib", lib)); + self.link_staticlib(lib); } fn link_rust_dylib(&mut self, lib: Symbol, path: &Path) { @@ -723,10 +729,17 @@ impl<'a> Linker for MsvcLinker<'a> { } } - fn link_staticlib(&mut self, lib: Symbol) { + fn link_local_dylib(&mut self, lib: Symbol) { + self.link_local_staticlib(lib); + } + fn link_local_staticlib(&mut self, lib: Symbol) { self.cmd.arg(&format!("{}.lib", lib)); } + fn link_staticlib(&mut self, lib: Symbol) { + self.cmd.arg(&format!("/DEFAULTLIB:{}.lib", lib)); + } + fn full_relro(&mut self) { // noop } @@ -767,7 +780,7 @@ impl<'a> Linker for MsvcLinker<'a> { } fn link_whole_staticlib(&mut self, lib: Symbol, _search_path: &[PathBuf]) { - self.link_staticlib(lib); + self.cmd.arg(format!("{}.lib", lib)); self.cmd.arg(format!("/WHOLEARCHIVE:{}.lib", lib)); } fn link_whole_rlib(&mut self, path: &Path) {