带有货物的 Rust 库 (rlib)

问题描述 投票:0回答:1

我正在尝试在 rust 中创建一个库,以便与 rust 可执行文件一起使用。在 C 中,你可以只创建 .a 或 .so(或者在 Windows 上为 .lib 或 .dll)并使用 CMake 等工具来链接所有内容,但是 rust 似乎没有这种基础设施?

可以使用cargo(cargo new)创建一个可执行文件,并通过添加--lib标志(cargo new --lib)创建一个库,但是如何使用生成的.rlib文件(来自库cargo项目) )?我设法链接 .rlib 文件,如下所示:

rustc main.rs --extern foo=libfoo.rlib

而且效果很好,但是,如果有可以为您执行此操作的货物,我对编写一千个 rustc 命令来构建最终的可执行文件(这取决于 .rlib)不感兴趣。我尝试使用构建脚本(它适用于任何 C 库,静态或动态),但如果我尝试使用 .rlib 文件,cargo 会说它找不到构建脚本“foo”(-lfoo):

fn main() {
  println!("cargo:rustc-link-search=.");
  println!("cargo:rustc-link-lib=foo");
}

我尝试将路径(搜索)替换为不同的目录(同时还将 .rlib 文件移动到正确的目录),还尝试了 libfoo、libfoo.rlib、... 的不同组合(请注意,对于 C 库,foo 是足够了)。

所以我的问题实际上是:如何创建一个供私人使用的 rust 库,以及如何以正确的方式将它与 rust 可执行文件一起使用,避免手动 rustc 命令?有没有工具可以做到这一点?我在构建脚本中遗漏了什么吗?也许存在像 CMake 这样的东西可以用于 rust?

我想可以在 Rust 代码上创建一个 C 接口并编译另一个 C 项目,因为它可以与 Cargo 一起使用。

我不想将代码发布到 crates.io,因为我希望这个库严格供私人使用。

rust linker rust-cargo
1个回答
1
投票

Cargo 不支持使用预编译的

.rlib
。 Cargo 旨在从源代码完全编译程序(不包括本机库)。

如何创建一个供私人使用的 Rust 库……我不想将代码发布到 crates.io,因为我希望这个库严格供私人使用。

要使用私有库,您需要使用
path

git 依赖项

编写依赖项
(或使用私有包注册表,但这需要更多的设置工作)。
[dependencies]
my-lib-a = { path = "../my-lib-a/" }
my-lib-b = { git = "https://my-git-host.example/my-lib-b", branch = "stable" }

您的私人图书馆现在的编译方式与“公共”图书馆完全一样。

© www.soinside.com 2019 - 2024. All rights reserved.