在构建静态库时,如何从'tests'文件夹中的集成测试链接Rust crate?

Dav*_*nes 9 static-libraries rust rust-cargo

我正在Rust中构建一个将从C/C++代码调用的库.Cargo.toml配置为将包传输为静态库:

[lib]
crate-type = ["staticlib"]
Run Code Online (Sandbox Code Playgroud)

我有一个测试tests/integration_test.rs:

extern crate mylibrary;

#[test]
fn it_works() {
    hello_world();   // Defined in 'mylibrary'.
}
Run Code Online (Sandbox Code Playgroud)

但是,在运行测试时cargo test,会输出以下错误:

error[E0463]: can't find crate for `mylibrary`
 --> tests\integration_test.rs:1:1
  |
1 | extern crate mylibrary;
  | ^^^^^^^^^^^^^^^^^^^^^ can't find crate
Run Code Online (Sandbox Code Playgroud)

如果我从那时删除staticlib配置行,Cargo.toml测试构建并运行正常.

我有两种可能性:

  1. 在以不同方式运行测试时,是否需要配置包的构建(即,它不构建静态库)?

  2. 我是否需要在测试中以不同方式链接静态库包(即好像它是系统C库)?

从文档中不清楚配置此设置的正确方法是什么,或者如何去做.

Mar*_*nck 1

[lib]    
crate-type = ["lib", "staticlib"]
Run Code Online (Sandbox Code Playgroud)

只要使用这个,您就没有后顾之忧。

https://doc.rust-lang.org/reference/linkage.html说“这些输出是可堆叠的,因为如果指定了多个输出,那么编译器将生成每种形式的输出,而无需重新编译。”