如何告诉Rust在哪里寻找静态库?

时间:2014-10-07 23:22:32

标签: rust

有没有办法告诉Rust在哪里寻找我的静态库?示例代码

#[link(name = "/this/is/the/path/libfoo.a", kind = "static")]

如果没有,我可以进行哪些配置更改或将我的库放入哪个文件夹以便我可以使用它?

2 个答案:

答案 0 :(得分:14)

rustc调用系统链接器,该链接器查找库目录中#[link(...)]中指定的所有库。通常有几个默认的库目录(如Linux上的/lib/usr/lib),还可以通过链接器标志指定更多(rustc接受-L选项然后通过它们到链接器)。

如果直接调用rustc,则可以使用-L选项添加其他库目录,然后将其传递给链接器。但是,如果您使用Cargo,您还可以选择其他选项:

  • Cargo将/target/<profile>/deps目录添加为库源目录。

  • 您可以使用cargo rustc

    cargo rustc -- -L /path/to/library/directory 
    
  • 您可以指定RUSTFLAGS环境变量:

    RUSTFLAGS='-L /path/to/library/directory' cargo build
    
  • 您可以使用构建脚本output more linker options

    println!("cargo:rustc-link-lib=static=foo");
    println!("cargo:rustc-link-search=native=/path/to/foo");
    

我认为,最简单的方法是添加a custom build script,它将在相应的/target/<profile>/deps目录中复制或创建符号链接到库中。

答案 1 :(得分:0)

要添加接受的答案,对我有用的内容如下:

  • debug 构建下,将依赖项文件放在target/debug/deps下工作;但是将文件放在target/debug/native/*下似乎不起作用。

默认情况下,货物似乎只在target/debug/deps下查看。

您可以使用cargo build --verbose运行,以查看详细的rustc命令和使用的选项。 -L选项指定其他链接依赖项目录。