gpt4 book ai didi

compiler-errors - 为什么我不能将 main.rs 添加到 crate 的源代码并导入结构?

转载 作者:行者123 更新时间:2023-11-29 08:23:22 25 4
gpt4 key购买 nike

为什么我不能克隆一个 git 项目,添加一个 main.rs 并导入其中一个结构?编译器提示导入是未知的,如果我让它知道它会提示库文件无法编译。

我的文件

C:\Users\datan\proj\gitlab.kitware.com\rust-gitlab>dir
Volume in drive C is OS
Volume Serial Number is 9410-E4E7

Directory of C:\Users\datan\proj\gitlab.kitware.com\rust-gitlab

2019-02-06 02:12 <DIR> .
2019-02-06 02:12 <DIR> ..
2019-02-06 02:04 20 .gitignore
2019-02-06 03:18 <DIR> .idea
2019-02-06 02:05 63 519 Cargo.lock
2019-02-06 02:04 660 Cargo.toml
2019-02-06 02:12 <DIR> cmake-build-debug
2019-02-06 02:04 <DIR> data
2019-02-06 02:04 11 048 LICENSE-APACHE
2019-02-06 02:04 1 082 LICENSE-MIT
2019-02-06 02:04 2 720 README.md
2019-02-06 02:04 335 rustfmt.toml
2019-02-06 03:16 <DIR> src
2019-02-06 02:11 <DIR> target
7 File(s) 79 384 bytes
7 Dir(s) 55 351 238 656 bytes free

我的“代码”:

use types::*;

fn main() {
println!("Hello, rust-gitlab!");
let repo_commit_detail: RepoCommitDetail = read_test_file("repo_commit_detail");
}

结构

C:\Users\datan\proj\gitlab.kitware.com\rust-gitlab>tree .
Folder PATH listing for volume OS
Volume serial number is 00000242 9410:E4E7
C:\USERS\DATAN\PROJ\GITLAB.KITWARE.COM\RUST-GITLAB
├───.idea
│ └───codeStyles
├───cmake-build-debug
│ └───CMakeFiles
├───data
├───src
│ └───test
└───target
└───debug
├───.fingerprint
│ ├───adler32-008121952d6e723e
│ ├───arrayvec-646ad0ece92a7d00
│ ├───arrayvec-800298e92d8a6b00
│ ├───arrayvec-8dcfe3021b2d6a8c
│ ├───autocfg-d540d3308658af53
│ ├───backtrace-4a5d8bbe58343768
│ ├───backtrace-76389fa126a505ca
│ ├───backtrace-a25120398233fbf2
│ ├───base64-8605715cecafa1de
│ ├───byteorder-6005d7caf2ed9454
│ ├───byteorder-675368122e548ca7
│ ├───byteorder-cacda78970cb326d
│ ├───bytes-245614f42b19aebe
│ ├───cfg-if-199b060bf8390609
│ ├───chrono-5959f27994de03e0
│ ├───crc32fast-0e880f27a0ce35a3
│ ├───crc32fast-601ce62d000e21bd
│ ├───crc32fast-9c59fdb01a618f87
│ ├───crossbeam-424114c559f55459
│ ├───crossbeam-channel-11d639148a522581
│ ├───crossbeam-deque-52c98f99d1a02bdd
│ ├───crossbeam-epoch-af8d62f026998a89
│ ├───crossbeam-utils-0d1e4d7da8a9ef57
│ ├───dtoa-24ecc23d181a18d5
│ ├───either-2ee3e437ff6c971e
│ ├───encoding_rs-d0dc5ad1a07eed3c
│ ├───encoding_rs-da47aa074a980d52
│ ├───encoding_rs-fd6e16943622578f
│ ├───error-chain-bf90b77261c62193
│ ├───fnv-aa2431fc6bc1ad66
│ ├───futures-c6e67b10dc6edbd6
│ ├───futures-cpupool-8e39e86f34ba679d
│ ├───gitlab-08ffdd36690d90f8
│ ├───gitlab-11fbba92a7cac036
│ ├───gitlab-6a33ea7f6205065e
│ ├───gitlab-ff4e8c6912a1992b
│ ├───h2-0ee18ce773a0a89d
│ ├───http-d2636b675bcf6465
│ ├───httparse-3bfb6bbc4103b725
│ ├───httparse-945236f44bbaae4b
│ ├───httparse-a633d1291de4b063
│ ├───hyper-d5c769dc0bac17de
│ ├───hyper-tls-bb5d862976202e56
│ ├───idna-eb455bf3c0c933b1
│ ├───indexmap-fd3d2119afdeaa48
│ ├───iovec-baee453073a2d5a5
│ ├───itertools-ecd8c4d65670cbd4
│ ├───itoa-2d8a8a209336a4b1
│ ├───kernel32-sys-323344e9ba717bff
│ ├───kernel32-sys-83eb403a9b94134f
│ ├───kernel32-sys-8f6a7cb898839565
│ ├───lazycell-c863022fb753ec04
│ ├───lazy_static-ba3bb80e02027d7a
│ ├───libc-058cf61bc83378d2
│ ├───libc-0d6d3d189a8fcbc8
│ ├───libc-7939fbb070556365
│ ├───libflate-dda03a69fd4704db
│ ├───lock_api-effbd268c74fb367
│ ├───log-2694fa5b5ff478b9
│ ├───matches-34ff768fe7fdff16
│ ├───memoffset-5218595f33c3708e
│ ├───mime-c20b452517077c0f
│ ├───mime_guess-78f6fdcc75bfb801
│ ├───mime_guess-b0cdb33e00444552
│ ├───mime_guess-bbd685b703852b01
│ ├───mio-97ff8160514f5116
│ ├───miow-77aa8c8f9462ad96
│ ├───native-tls-3753990a7317fe2a
│ ├───native-tls-6abda051a7bbee28
│ ├───native-tls-f608c79f4e18dacd
│ ├───net2-508ac492f9b7b00d
│ ├───nodrop-9f556cbcc9819baa
│ ├───num-integer-3b8af9e09499eb17
│ ├───num-integer-6591db06d92151f8
│ ├───num-integer-f5b2b5fbdf9ab12f
│ ├───num-traits-122ab06899abc72a
│ ├───num-traits-5e3121b94e205820
│ ├───num-traits-892c39b3d2eb30ab
│ ├───num_cpus-e0b2ff8b8d59c6e1
│ ├───owning_ref-bf183c7d773e0123
│ ├───parking_lot-12a126bd707a9322
│ ├───parking_lot_core-5118c128aa288759
│ ├───parking_lot_core-d807a50d17f4c651
│ ├───parking_lot_core-ff708f491c5bff4c
│ ├───percent-encoding-2476bdc6c1b57ab9
│ ├───phf-94566d3a79ef4ee4
│ ├───phf_codegen-e81124e1842629f7
│ ├───phf_generator-77be707e85bdbaab
│ ├───phf_shared-83f1cdc4827f16e2
│ ├───proc-macro2-3730dc9da7871eda
│ ├───proc-macro2-490294cd99fdab5c
│ ├───proc-macro2-a7ad7b68ac88e1e9
│ ├───quote-0815e85bf26aa999
│ ├───rand-36058bce56ceb9f0
│ ├───rand-7bb4cfe73bf0dd1e
│ ├───rand-e1919e05ce4b78ef
│ ├───rand_chacha-5b135890bc288e05
│ ├───rand_chacha-88fea0759acfb849
│ ├───rand_chacha-ff6617e45043fb8d
│ ├───rand_core-22f8b569c1c44c74
│ ├───rand_core-44b0efb2e9232e43
│ ├───rand_hc-6db16b100e560df6
│ ├───rand_isaac-cd4ed7aeaa173fa8
│ ├───rand_jitter-594b9541efdf7198
│ ├───rand_os-408f5a001096e49e
│ ├───rand_pcg-04b94dbba308ed6e
│ ├───rand_pcg-7251ce262f199c3c
│ ├───rand_pcg-ee7758f0896a3792
│ ├───rand_xorshift-b4798ffeed80dc8e
│ ├───reqwest-8cc9d5a46fc1cada
│ ├───rustc-demangle-54becd0a270f9042
│ ├───rustc_version-a903e7df435c73ab
│ ├───ryu-5f4d3c0db59c3c54
│ ├───ryu-6ba019180c4a274b
│ ├───ryu-9235d9421bf627c7
│ ├───schannel-8bdf6ec01769ef1c
│ ├───scopeguard-56bbc3bacf26b561
│ ├───semver-c5c93388824cc96e
│ ├───semver-parser-654d61a88b761106
│ ├───serde-d8d5485694af815f
│ ├───serde-dad6256f5839031b
│ ├───serde-fe431a9eda84f305
│ ├───serde_derive-27a8dc8a7e741ec3
│ ├───serde_json-54e6f40131bbe4f3
│ ├───serde_urlencoded-164f04fa4cf91ece
│ ├───siphasher-2144e89659a7ccab
│ ├───slab-29ad5a838c81f6af
│ ├───smallvec-8c0ee41d14e5bd2a
│ ├───stable_deref_trait-6b5901538f6cb51d
│ ├───string-726f5a2abd463420
│ ├───syn-3788b283d77da292
│ ├───time-2cbb174b24b625e6
│ ├───tokio-current-thread-3f718ab37342974a
│ ├───tokio-executor-e90e6a555413eaff
│ ├───tokio-f4f06f03abb9066d
│ ├───tokio-io-83563994d5ed4ae3
│ ├───tokio-reactor-cee5f1c0b2993ee0
│ ├───tokio-tcp-e384fdc1139f59d4
│ ├───tokio-threadpool-f5fc7c392f4d3bcd
│ ├───tokio-timer-baf35f3876a94a68
│ ├───try-lock-5b05e80f1baf5381
│ ├───unicase-24a369037c028ed4
│ ├───unicase-355ca4fd327fabfd
│ ├───unicase-5ce264aa1273838b
│ ├───unicase-8ac0f082768d424a
│ ├───unicase-cf024d918a538866
│ ├───unicase-e9044cba12acdee6
│ ├───unicode-bidi-bb475f0c3944d6b7
│ ├───unicode-normalization-64e9089438d2ebfd
│ ├───unicode-xid-a7467f62a39abf94
│ ├───unreachable-67223564bef6342d
│ ├───url-58e1116538252022
│ ├───uuid-8d3ab2c31242ff75
│ ├───version_check-8ad7f975e23d024d
│ ├───void-0896fe1d47015a04
│ ├───want-6f48436d34182abd
│ ├───winapi-4a53e903331f64f4
│ ├───winapi-4b6d1267534d970d
│ ├───winapi-6f75c5e1021b74d7
│ ├───winapi-752db0e8208ff517
│ ├───winapi-build-2ed6cec7c9de885d
│ ├───ws2_32-sys-5c26f11f3d3ba52f
│ ├───ws2_32-sys-a6c2fe9a71ea1454
│ └───ws2_32-sys-e4a5aabbb21dd0b8
├───build
│ ├───arrayvec-646ad0ece92a7d00
│ │ └───out
│ ├───arrayvec-8dcfe3021b2d6a8c
│ ├───backtrace-4a5d8bbe58343768
│ │ └───out
│ ├───backtrace-76389fa126a505ca
│ ├───byteorder-6005d7caf2ed9454
│ ├───byteorder-cacda78970cb326d
│ │ └───out
│ ├───crc32fast-601ce62d000e21bd
│ │ └───out
│ ├───crc32fast-9c59fdb01a618f87
│ ├───encoding_rs-d0dc5ad1a07eed3c
│ ├───encoding_rs-da47aa074a980d52
│ │ └───out
│ ├───httparse-3bfb6bbc4103b725
│ ├───httparse-a633d1291de4b063
│ │ └───out
│ ├───kernel32-sys-323344e9ba717bff
│ │ └───out
│ ├───kernel32-sys-83eb403a9b94134f
│ ├───libc-058cf61bc83378d2
│ ├───libc-7939fbb070556365
│ │ └───out
│ ├───mime_guess-78f6fdcc75bfb801
│ ├───mime_guess-b0cdb33e00444552
│ │ └───out
│ ├───native-tls-6abda051a7bbee28
│ ├───native-tls-f608c79f4e18dacd
│ │ └───out
│ ├───num-integer-3b8af9e09499eb17
│ │ └───out
│ ├───num-integer-f5b2b5fbdf9ab12f
│ ├───num-traits-122ab06899abc72a
│ ├───num-traits-892c39b3d2eb30ab
│ │ └───out
│ ├───parking_lot_core-5118c128aa288759
│ ├───parking_lot_core-ff708f491c5bff4c
│ │ └───out
│ ├───proc-macro2-3730dc9da7871eda
│ │ └───out
│ ├───proc-macro2-a7ad7b68ac88e1e9
│ ├───rand-7bb4cfe73bf0dd1e
│ ├───rand-e1919e05ce4b78ef
│ │ └───out
│ ├───rand_chacha-5b135890bc288e05
│ │ └───out
│ ├───rand_chacha-88fea0759acfb849
│ ├───rand_pcg-04b94dbba308ed6e
│ │ └───out
│ ├───rand_pcg-ee7758f0896a3792
│ ├───ryu-5f4d3c0db59c3c54
│ │ └───out
│ ├───ryu-6ba019180c4a274b
│ ├───serde-d8d5485694af815f
│ ├───serde-fe431a9eda84f305
│ │ └───out
│ ├───unicase-355ca4fd327fabfd
│ │ └───out
│ ├───unicase-5ce264aa1273838b
│ ├───unicase-8ac0f082768d424a
│ │ └───out
│ ├───unicase-e9044cba12acdee6
│ ├───winapi-6f75c5e1021b74d7
│ │ └───out
│ ├───winapi-752db0e8208ff517
│ ├───ws2_32-sys-a6c2fe9a71ea1454
│ │ └───out
│ └───ws2_32-sys-e4a5aabbb21dd0b8
├───deps
├───examples
├───incremental
│ ├───gitlab-18ycyqu9smunr
│ │ └───s-f97zmznulc-1et4slk-glq89ki51e1z
│ ├───gitlab-2ig8akjm0w1yx
│ │ ├───s-f980cgaxw0-1jrgkvo-1ievukzcrjc88
│ │ └───s-f981eiai94-z9lt25-working
│ └───gitlab-3fwelxjyajmph
│ └───s-f97zp4swxe-tfxev5-1duuud7rw47m5
└───native

如果我按照所有可用的建议编译我的 main.rs,那么我破坏了我没有接触过的库:

error[E0433]: failed to resolve: maybe a missing extern crate crates;? --> src\types.rs:17:5 | 17 | use crates::chrono::{DateTime, NaiveDate, Utc}; | ^^^^^^ maybe a missing extern crate crates;?

最佳答案

首先,返回并重新阅读The Rust Programming Language's chapter on "Packages, Crates, and Modules" .这讨论了几个对于理解至关重要的基本概念。

Why can I not clone a git project, add a main.rs and import one of the structs?

对我来说,这就像“为什么我不能伸手进入另一个人,捕获他们的肺,然后用他们呼吸”一样的问题?你根本无法下载一些任意的 Rust 库并开始从中提取随机文件并期望它们能够工作。

特别是在您的情况下,所有库都有一个 lib.rs,它是 crate root。 crate root 往往有许多其他代码需要的通用定义,并导入所有子模块。当您创建 main.rs 并将库中的模块声明为您自己的模块时,您的 main.rs 成为 crate root,但它没有定义图书馆需要的所有东西。这会导致代码无法编译。

相反,只需按照预期使用 crate 作为库

最简单的事情是创建一个新的 Cargo 项目并将箱子作为依赖项添加到您的 Cargo.toml 中。 gitlab crate is already distributed on crates.io ,所以你只需添加版本号:

[dependencies]
gitlab = "0.1104.1"

main.rs 中添加 use gitlab::types::* 并编写代码。


如果您需要使用本地 checkout 的源代码(也许您正在修改 crate?),或者如果您真的想编辑上游库以同时拥有 lib.rsmain.rs,参见:

关于compiler-errors - 为什么我不能将 main.rs 添加到 crate 的源代码并导入结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54545775/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com