【发布时间】:2020-12-18 18:29:18
【问题描述】:
这是我第一次尝试 rust,我来自 c++ 背景并试图开始。所以我开始在一个名为.../rust/的文件夹中创建我的项目
注意:我使用此链接开始使用这些工具:https://medium.com/@wizofe/cross-compiling-rust-for-arm-e-g-raspberry-pi-using-any-os-11711ebfc52b
- 我创建了默认的 rust 程序,使用:
cargo new --bin rust_test。这将创建.../rust/rust_test。 - 我可以使用:
cargo build或cargo build --target=armv7-unknown-linux-gnueabihf(对于我的 BeagleBB)进行构建
到目前为止一切顺利。现在我想创建一个可以与其他项目共享的库。但我会在 rust_test 文件夹中创建它为.../rust/rust_test/utils:
- 创建库时使用:
cargo new --lib utils - 我可以使用
cargo build在utils目录中构建我的实用程序,这会生成一个.rlib 文件。 - 现在我想让我的 rust_test 项目将其构建为依赖项,我发现我只需要在我的 rust_test .toml 文件中添加:
utils = { path = "utils" }。 - 现在我可以使用
cargo build在 rust_test 文件夹中构建我的 rust_test 可执行文件和我的 utils lib
再一次,到目前为止一切都很好。对我来说,难题的最后一部分是在我的 utils 库中使用该函数。里面有两个功能。一个叫做adder(a,b) - 一个模板函数的尝试,一个叫做test123() 的基本函数。这就是我卡住的地方。我似乎无法制定正确的语法来调用这些函数中的任何一个。
这是我的主要文件:
rust_test
位置:.../rust/rust_test/
Cargo.toml
[package]
name = "rust_test"
version = "0.1.0"
authors = ["test@gmail.com <test@gmail.com>"]
edition = "2018"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
utils = { path = "utils" }
main.rs
mod utils;
fn main() {
println!("Hello, world!");
utils::test123(); // ??? - does not work
}
实用工具
位置:.../rust/rust_test/utils/
Cargo.toml
[package]
name = "utils"
version = "0.1.0"
authors = ["test@gmail.com <test@gmail.com>"]
edition = "2018"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
lib.rs
#[cfg(test)]
mod tests {
#[test]
fn adder<T>(a: T, b: T) -> T {
return a + b;
}
}
#[cfg(utils)]
mod utils {
#[utils]
fn test123() {
println!("test!");
}
}
输出
~/bbb/development/rust/rust_test$ cargo build
Compiling rust_test v0.1.0 (/home/user/bbb/development/rust_test)
error[E0583]: file not found for module `utils`
--> src/main.rs:1:1
|
1 | mod utils;
| ^^^^^^^^^^
|
= help: to create the module `utils`, create file "src/utils.rs"
error[E0425]: cannot find function `test123` in module `utils`
--> src/main.rs:6:12
|
6 | utils::test123(); // ??? - does not work
| ^^^^^^^ not found in `utils`
error: aborting due to 2 previous errors
Some errors have detailed explanations: E0425, E0583.
For more information about an error, try `rustc --explain E0425`.
error: could not compile `rust_test`.
我不得不承认我真的不明白#[cfg...] 和#[...] 行的作用。但从我读到的内容来看,我认为 main.rs 中的 mod utils; 告诉 rust 编译器/链接器在其他地方寻找 test123() 函数。
也许我什至还没有链接这些文件 - 我只是构建了它们?
所以问题是我现在需要做什么才能将我的库链接到我的应用程序,以便我可以使用 lib 函数 test123()?
更新
如果我删除 mod utils; 我得到错误:
user@user-VirtualBox:~/bbb/development/rust/rust_test$ cargo build
Compiling rust_test v0.1.0 (/home/user/bbb/development/rust_test)
error[E0425]: cannot find function `test123` in crate `utils`
--> src/main.rs:4:12
|
4 | utils::test123(); // ??? - does not work
| ^^^^^^^ not found in `utils`
error: aborting due to previous error
For more information about this error, try `rustc --explain E0425`.
error: could not compile `rust_test`.
【问题讨论】:
标签: rust subdirectory