代码之家  ›  专栏  ›  技术社区  ›  Greg

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

  •  1
  • Greg  · 技术社区  · 8 年前

    以下面的代码为例:

    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 回复  |  直到 8 年前
        1
  •  3
  •   Shepmaster Tim Diekmann    8 年前

    第一个问题的答案是肯定的!如果lib文件是 libfoo.o , #[link(name = "foo") 你的代码已经足够了。更多细节请参见 official documentation .

    它将与位于当前工作路径和系统lib路径中的lib文件相关。(我在任何文档中都找不到这个,但我曾经成功地做到了)。可以使用 rustc -l XX -L XX . 使用带有 build script 是个更好的方法。

        2
  •  2
  •   DK.    8 年前

    如果需要控制如何找到库或如何链接到rust代码,则应通过 build script .