使用以下代码作为示例:
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
在哪里?
答案 0 :(得分:3)
第一个问题的答案是肯定的!如果您的lib文件是libfoo.o
,则代码中的#[link(name = "foo")
就足够了。 official documentation中有更多详细信息。
它将相对于位于当前工作路径和系统lib路径中的lib文件。 (我在任何文档中都找不到这个,但我曾经成功地完成了它)。您可以使用rustc -l XX -L XX
指定路径。使用货物build script是一种更好的方式。
答案 1 :(得分:2)
如果您需要控制如何找到库或链接到Rust代码,您应该通过build script来执行此操作。