如何静态链接到现有的rlib?

6
我有两个独立创建的libsomelibrary.rlib文件,分别位于 /path/to/deps/debug//path/to/deps/release/ 目录下。同时我有一个项目在 /path/to/myproject/ 目录下,需要静态链接到libsomelibrary.rlib

如何在 Cargo.toml (或其他地方)中指定对这些 .rlib 的引用?

我已经尝试在 Cargo.toml 中的 [dependencies] 下添加 somelibrary,并使用 build.rs 指定搜索路径和文件名:

println!("cargo:rustc-link-lib=static=somelib");
println!("cargo:rustc-link-search=/path/to/deps/debug/");

然后在 Cargo.toml 文件中:

[package]
build = "build.rs"
links = "somelibrary"

但我仍然遇到链接错误。


你到底在尝试做什么?为什么你有那些不属于现有 crate 的任意 rlibs 滞留在那里? - Shepmaster
我想分发自包含的.rlibs,而不必发布源代码。 - Laszlo
我也这么认为。你正在进行一场艰苦的战斗:库可以作为二进制文件分发,以便最终用户无法看到源代码吗? - Shepmaster
啊,谢谢。看了相关答案后我理解了你的观点。我会进一步尝试“仅暴露特质对象的Rust API”这个变体。 - Laszlo
1个回答

3
据我所知,你需要使用rustc手动编译。
rustc main.rs —-extern custom1=path/to/libcustom1.rlib —-extern custom2=path/to/libcustom2.rlib

每当您添加一个.rlib格式的库时,您需要为每个库都加上“--extern”选项。
请参考this 以及this 此外,rustc的man页面将为您提供有关更复杂的事项(如FFI)的额外信息。

如果你有一个名为my_lib的项目,在Cargo.toml中也可以这样写:[dependencies] my_lib = {path = "../my_lib"},来自你的源代码项目。 - Mike Cheel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接