beryllium
beryllium copied to clipboard
Statically linking in a dll which a cdylib links to results in explosive linker error
Hello!
I have a crate graph like this:
[CORE] -> [SHARED] -> [THING]
Core is a rust library that uses beryllium with the static linking feature on. Shared
is a cdylib which has a cargo.toml like this:
[dependencies]
core = { path = "../core-user" }
[lib]
crate-type = ["cdylib"]
CORE
is a single line lib.rs
like this:
pub use beryllium::*;
(this makes sure that symbols are exported)
and SHARED
shows just this function (to make sure that symbols are exported again):
pub use sdl2_user::*;
pub extern "C" fn hello() {
unsafe {
sdl2_user::get_error_unchecked();
}
}
This results in a linker error like so:
libstd-0087fff1d6c84113.rlib(std-0087fff1d6c84113.std.rcc8w0m2-cgu.0.rcgu.o) : error LNK2019: unresolved external symbol SetLastError referenced in function _ZN3std3env11current_dir17he5f1b836db8a0198E
libstd-0087fff1d6c84113.rlib(std-0087fff1d6c84113.std.rcc8w0m2-cgu.0.rcgu.o) : error LNK2019: unresolved external symbol GetCurrentDirectoryW referenced in function _ZN3std3env11current_dir17he5f1b836db8a0198E
libstd-0087fff1d6c84113.rlib(std-0087fff1d6c84113.std.rcc8w0m2-cgu.0.rcgu.o) : error LNK2019: unresolved external symbol GetEnvironmentStringsW referenced in function _ZN3std3env4vars17h42ceee9b38973e62E
libstd-0087fff1d6c84113.rlib(std-0087fff1d6c84113.std.rcc8w0m2-cgu.0.rcgu.o) : error LNK2019: unresolved external symbol GetEnvironmentVariableW referenced in function _ZN3std3env7_var_os17h3c8a99eea2980dd6E
libstd-0087fff1d6c84113.rlib(std-0087fff1d6c84113.std.rcc8w0m2-cgu.0.rcgu.o) : error LNK2019: unresolved external symbol SetEnvironmentVariableW referenced in function _ZN3std3env8_set_var17he7a29a0d59dc6953E
libstd-0087fff1d6c84113.rlib(std-0087fff1d6c84113.std.rcc8w0m2-cgu.0.rcgu.o) : error LNK2019: unresolved external symbol GetTempPathW referenced in function _ZN3std3env8temp_dir17h4bada281cbece498E
libstd-0087fff1d6c84113.rlib(std-0087fff1d6c84113.std.rcc8w0m2-cgu.0.rcgu.o) : error LNK2019: unresolved external symbol GetCommandLineW referenced in function _ZN3std3env7args_os17h1ecce28037ed8d46E
libstd-0087fff1d6c84113.rlib(std-0087fff1d6c84113.std.rcc8w0m2-cgu.0.rcgu.o) : error LNK2019: unresolved external symbol strlen referenced in function _ZN3std3ffi5c_str7CString8from_raw17h4728d381ff641ef8E
libstd-0087fff1d6c84113.rlib(std-0087fff1d6c84113.std.rcc8w0m2-cgu.0.rcgu.o) : error LNK2019: unresolved external symbol WriteFile referenced in function _ZN3std2fs5write5inner17h3b47f92fd53ddf45E
libstd-0087fff1d6c84113.rlib(std-0087fff1d6c84113.std.rcc8w0m2-cgu.0.rcgu.o) : error LNK2019: unresolved external symbol FlushFileBuffers referenced in function _ZN3std2fs4File8sync_all17h82624ce9851eb942E
libstd-0087fff1d6c84113.rlib(std-0087fff1d6c84113.std.rcc8w0m2-cgu.0.rcgu.o) : error LNK2019: unresolved external symbol DuplicateHandle referenced in function _ZN3std2fs4File9try_clone17h0ac83dbacd68725fE
libstd-0087fff1d6c84113.rlib(std-0087fff1d6c84113.std.rcc8w0m2-cgu.0.rcgu.o) : error LNK2019: unresolved external symbol ReadFile referenced in function _ZN47_$LT$std..fs..File$u20$as$u20$std..io..Read$GT$4read17h025336fbc570c147E
libstd-0087fff1d6c84113.rlib(std-0087fff1d6c84113.std.rcc8w0m2-cgu.0.rcgu.o) : error LNK2019: unresolved external symbol SetFilePointerEx referenced in function _ZN47_$LT$std..fs..File$u20$as$u20$std..io..Seek$GT$4seek17h83cd02b5dc4d18f2E
libstd-0087fff1d6c84113.rlib(std-0087fff1d6c84113.std.rcc8w0m2-cgu.0.rcgu.o) : error LNK2019: unresolved external symbol EnterCriticalSection referenced in function _ZN3std2io5stdio6Stdout4lock17h5715c9b1b9fabe02E
libstd-0087fff1d6c84113.rlib(std-0087fff1d6c84113.std.rcc8w0m2-cgu.0.rcgu.o) : error LNK2019: unresolved external symbol WaitForSingleObject referenced in function _ZN3std7process7Command6status17h3c88f12b0a48c645E
libstd-0087fff1d6c84113.rlib(std-0087fff1d6c84113.std.rcc8w0m2-cgu.0.rcgu.o) : error LNK2019: unresolved external symbol GetExitCodeProcess referenced in function _ZN3std7process7Command6status17h3c88f12b0a48c645E
libstd-0087fff1d6c84113.rlib(std-0087fff1d6c84113.std.rcc8w0m2-cgu.0.rcgu.o) : error LNK2019: unresolved external symbol TerminateProcess referenced in function _ZN3std7process5Child4kill17he184217fdd10741aE
libstd-0087fff1d6c84113.rlib(std-0087fff1d6c84113.std.rcc8w0m2-cgu.0.rcgu.o) : error LNK2019: unresolved external symbol GetProcessId referenced in function _ZN3std7process5Child2id17h06ca3cd212f03301E
libstd-0087fff1d6c84113.rlib(std-0087fff1d6c84113.std.rcc8w0m2-cgu.0.rcgu.o) : error LNK2019: unresolved external symbol CreateEventW referenced in function _ZN3std7process5Child16wait_with_output17h43ad5107058e3ca9E
libstd-0087fff1d6c84113.rlib(std-0087fff1d6c84113.std.rcc8w0m2-cgu.0.rcgu.o) : error LNK2019: unresolved external symbol WaitForMultipleObjects referenced in function _ZN3std7process5Child16wait_with_output17h43ad5107058e3ca9E
libstd-0087fff1d6c84113.rlib(std-0087fff1d6c84113.std.rcc8w0m2-cgu.0.rcgu.o) : error LNK2019: unresolved external symbol GetOverlapp`
```
and on and on.
Using the DLL, these problems go away
That's quite the wild linker error. I'm not eve slightly sure how you'd fix it. If using the DLL fixes things then you should do that.
👍 I get a very similar error with SDL2-rs as well