-
-
Notifications
You must be signed in to change notification settings - Fork 180
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
target/debug/deps folder not propagated in LD_LIBRARY_PATH #1297
Comments
If useful, the: |
Out of curiosity if you do:
Where A bunch of crates using native code will work if you do |
Thanks. I am not completely sure what you intend there to check. But I specified the path like: Just to be clear, it is the environment's LD_LIBRARY_PATH that is not the same for running cargo test as for tarpaulin while running the test (not during building of the test). Since this library is loaded dynamically in runtime (not as a "statically bound" dynamic library if you know what I mean). |
So you run Some native library bindings will actually add to the linker path dynamically via the build script and download the shared objects to a folder in the target dir which may not be the same place. They may also choose not to add that folder to LD_LIBRARY_PATH if a user specifies they want to use a system installed one and not a downloaded one - but still have a downloaded one in their target dir from a previous run. of course if |
So I misunderstood you, it's too separate things. Sorry. |
I found out that env!() macro in my test gives me the LD_LIBRARY_PATH as it were during build-time (in which the deps folder is actually there). I could in the test loop over the paths, concat with the library name and try loading until one of the paths worked. That solves my issue in the best way. |
I don't think the env macro would work for tarpaulin in that case as you're not rebuilding tarpaulin every time you run it. But I will look into what cargo test is doing during run and see if there's something I can add to smooth the workflow. Personally in $DAY_JOB I set the LD_LIBRARY_PATH for tensorflow and ffmpeg libraries which we install in CI and link to. I prefer that over relying on whatever crate I'm using for bindings downloading one as it has in the past broken things - or resulted in CI testing a different set of dependencies than we're using in prod |
Thanks for the advice. Will discuss it in the team. |
In general, It would be nice if cargo-tarpaulin could do the same, so it does not require a separate setup from the other cargo tools! EDIT: a bit more details: cargo seems to add folders like |
@Luthaf so with tarpaulin's torch test https://github.com/xd009642/tarpaulin/tree/develop/tests/data/torch_test torch is downloaded into a EDIT: Okay so right here I check the build script for linker paths and libraries so I can add things to the Linker path https://github.com/xd009642/tarpaulin/blob/develop/src/cargo.rs#L295-L313 |
Thanks for checking. I think it was failing for me, but I'll check again and try to reproduce the issue I was having in a small project. |
Ok, so with this [package]
name = "tarpaulin-metatensor"
version = "0.1.0"
edition = "2021"
[dependencies]
metatensor = "0.2" And this #[cfg(test)]
mod tests {
#[test]
fn test_labels() {
let labels = metatensor::Labels::new(["a"], &[[0]]);
assert_eq!(labels.names(), ["a"]);
}
} I get the following output for
But this with
The file is in This is not urgent for me, I can work around this by statically linking |
aha that's helpful, okay I should be able to solve this my end now I have an MRE! |
Okay I potentially have a fix in this PR branch #1652 - doesn't yet work on windows and mac but I'll look into them and figure out the right behaviour |
This is fixed and in the develop branch, release should be out before the end of the week |
Using tarpauling 0.25.1.
I have a crate building a shared library (.so) with c - code (build.rs).
I have another rust-only crate exposing FFI code to that library (calls made in both directions, rust calls into C code, rust expose C FFI functions to be called from the library).
The rust crate has in it's Cargo.toml set a dependency to the dynamic C library:
[dev-dependencies]
my-library.workspace = true
In the rust crate I have a test in the tests folder, loading the C library dynamically using libloading (e.g. dlopen).
Running this with cargo test works fine, with tarpaulin the library is not found.
I inspected the LD_LIBRARY_PATH in both cases, when running tarpaulin the:
/target/debug/deps
folder was missing (but not when running cargo test) and is the reason for the failure.
I am not sure if I have missed anything that I should have given to tarpaulin or if it's a problem not specific to tarpaulin but the inconsistency here bring me the think it's an issue.
To Reproduce
Build a c library using build.rs, it's enough with one C function in there.
Build a rust crate using the function in the C library.
Create a test using libloading that loads up the C library, calling get to resolve the C library's function.
Call it.
Expected behavior
The C library should have been found by the test code when running tarpaulin, just like when using cargo test.
The /target//deps folder should be included in the LD_LIBRARY_PATH during test execution.
The text was updated successfully, but these errors were encountered: