在Rust中指定到FFI库的链接路径有哪些不同的方法?

时间:2018-05-31 07:36:43

标签: rust extern ffi

使用以下代码作为示例:

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);
}

#[link(name = "adder")]是否应包含 .o / a / .h 文件的相对路径?例如,它应该是#[link(name = "../adderlib/adder")]吗?是否有另一种方法告诉编译器adder在哪里?

2 个答案:

答案 0 :(得分:3)

第一个问题的答案是肯定的!如果您的lib文件是libfoo.o,则代码中的#[link(name = "foo")就足够了。 official documentation中有更多详细信息。

它将相对于位于当前工作路径和系统lib路径中的lib文件。 (我在任何文档中都找不到这个,但我曾经成功地完成了它)。您可以使用rustc -l XX -L XX指定路径。使用货物build script是一种更好的方式。

答案 1 :(得分:2)

如果您需要控制如何找到库或链接到Rust代码,您应该通过build script来执行此操作。