Reputation: 8925
Using the below code as an example:
extern crate libc;
#[link(name = "adder")]
extern {
fn double_input(input: libc::c_int) -> libc::c_int;
}
fn main() {
let input = 4;
let output = unsafe { double_input(input) };
println!("{} * 2 = {}", input, output);
}
Should #[link(name = "adder")]
include a relative path to the .o / a / .h files? For example, should it be #[link(name = "../adderlib/adder")]
? Is there another way to tell the compiler where adder
is?
Upvotes: 1
Views: 873
Reputation: 343
The answer to the first question is YES! If your lib file is libfoo.o
, #[link(name = "foo")
is enough in your code. There are more details in the official documentation.
It will be relative to the lib file which is located in the current work path and the system lib path. (I cannot find this in any documentation, but I once made it successfully). You can specify a path using rustc -l XX -L XX
. Using Cargo with a build script is a better way.
Upvotes: 3
Reputation: 59075
If you need to control how a library is found or linked to your Rust code, you should do so via a build script.
Upvotes: 2