Is there any way to tell Rust where to look for my static library? Example code
#[link(name = \"/this/is/the/path/libfoo.a\", kind = \"static\")]
rustc
invokes the system linker which looks for all libraries specified in #[link(...)]
in library directories. There are usually several default library directories (like /lib
and /usr/lib
on Linux), and more can be specified via linker flags (rustc
accepts -L
options which it then passes through to the linker).
If you invoke rustc
directly, you can use the -L
option to add additional library directories which will be then passed through to the linker. If you use Cargo, however, you've got a few more options:
Cargo adds the /target/<profile>/deps
directory as a library source directory.
You can use cargo rustc
cargo rustc -- -L /path/to/library/directory
You can specify the RUSTFLAGS
environment variable:
RUSTFLAGS='-L /path/to/library/directory' cargo build
You can use a build script to output more linker options
println!("cargo:rustc-link-lib=static=foo");
println!("cargo:rustc-link-search=native=/path/to/foo");
The easiest way for you, I think, is to add a custom build script which will copy or create a symlink to your library in the corresponding /target/<profile>/deps
directory.
To add on to the accepted answer, what worked for me is as following:
target/debug/deps
worked; but putting files under target/debug/native/*
did not seem to work.Cargo seems to only look under target/debug/deps
by default.
You can run with cargo build --verbose
to see the verbose rustc
commands and the options used. -L
option specifies additional link dependency directory.