什么是指定在鲁斯特的链接路径FFI库方式的不同?(What are the different wa

2019-09-25 18:16发布

使用下面的代码作为一个例子:

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 /一个/ h文件的相对路径? 例如,它应该是#[link(name = "../adderlib/adder")] ? 有另一种方式来告诉编译器adder是什么?

Answer 1:

回答第一个问题是肯定的! 如果您的LIB文件是libfoo.o#[link(name = "foo")就足以在你的代码。 还有的更详细的官方文件 。

这将是相对于位于当前工作路径和系统库路径的lib文件。 (我不能任何文档中发现这一点,但我曾把它成功)。 您可以使用指定路径rustc -l XX -L XX 。 使用货运与构建脚本是一种更好的方式。



Answer 2:

如果你需要控制一个库是如何发现或链接到您的锈代码,你应该通过这样做构建脚本 。



文章来源: What are the different ways of specifying the linking path to FFI libraries in Rust?
标签: rust extern ffi