Greg
Greg

Reputation: 8925

What are the different ways of specifying the linking path to FFI libraries in Rust?

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

Answers (2)

pearzl
pearzl

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

DK.
DK.

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

Related Questions