Description
Problem
If you have a dylib
-kind crate and try to use it from a staticlib
-kind crate, you get this error:
error: crate `dylib` required to be available in rlib format, but was not found in this form
Steps
- Checkout https://github.com/russelltg/link-dylib-to-staticlib
cargo build
Possible Solution(s)
Ideally metadata in the .lib
would be generated to make the eventual target link to the shared library, I assume through the native-static-libs
. It would be fine without this though, I'm fine with manually linking it.
Alternatively, if this is not a valid configuration, a better error message would be appreciated
Notes
My usecase is something I think should be supported--I'm writing a static library to be consumed from a C++ application, and it needs a tokio runtime that will be shared with other static libraries. So I've put the tokio runtime in the dynamic library.
My workaround for now is to make it a cdylib
and not to mangle the function, and import it with an extern
section.
Maybe there's a better way to do what I'm trying to do?
Version
cargo 1.73.0 (9c4383fb5 2023-08-26)
release: 1.73.0
commit-hash: 9c4383fb55986096b414d98125421ab87b5fd642
commit-date: 2023-08-26
host: x86_64-pc-windows-msvc
libgit2: 1.6.4 (sys:0.17.2 vendored)
libcurl: 8.2.1-DEV (sys:0.4.65+curl-8.2.1 vendored ssl:Schannel)
os: Windows 10.0.19045 (Windows 10 Pro) [64-bit]