有没有办法告诉Rust在哪里寻找我的静态库?示例代码
#[link(name = "/this/is/the/path/libfoo.a", kind = "static")]
如果没有,我可以进行哪些配置更改或将我的库放入哪个文件夹以便我可以使用它?
答案 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)
要添加接受的答案,对我有用的内容如下:
target/debug/deps
下工作;但是将文件放在target/debug/native/*
下似乎不起作用。默认情况下,货物似乎只在target/debug/deps
下查看。
您可以使用cargo build --verbose
运行,以查看详细的rustc
命令和使用的选项。 -L
选项指定其他链接依赖项目录。