Cargo: 如果 `crate-type = ["cdylib"]`,则在集成测试中找不到 Crate

创建于 2019-02-13  ·  3评论  ·  资料来源: rust-lang/cargo

问题
我正在开发需要使用 python 的代码,这要求我有一个cdylib的板条箱类型。 事实证明,当您按照建议使用tests目录时,目录中的代码找不到 crate,失败并出现如下错误:

   Compiling cargo_issue_6659 v0.1.0 (/home/cfkaran2/Desktop/cargo_issue_6659)
     Running `rustc --edition=2018 --crate-name tester tests/tester.rs --color always --emit=dep-info,link -C debuginfo=2 --test -C metadata=0525a91fc572753f -C extra-filename=-0525a91fc572753f --out-dir /home/cfkaran2/Desktop/cargo_issue_6659/target/debug/deps -C incremental=/home/cfkaran2/Desktop/cargo_issue_6659/target/debug/incremental -L dependency=/home/cfkaran2/Desktop/cargo_issue_6659/target/debug/deps`
     Running `rustc --edition=2018 --crate-name cargo_issue_6659 src/lib.rs --color always --emit=dep-info,link -C debuginfo=2 --test -C metadata=b9fa70b838dfddae -C extra-filename=-b9fa70b838dfddae --out-dir /home/cfkaran2/Desktop/cargo_issue_6659/target/debug/deps -C incremental=/home/cfkaran2/Desktop/cargo_issue_6659/target/debug/incremental -L dependency=/home/cfkaran2/Desktop/cargo_issue_6659/target/debug/deps`
error[E0463]: can't find crate for `rustc_issue_report_cdylib`
 --> tests/tester.rs:1:1
  |
1 | extern crate rustc_issue_report_cdylib;
  | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ can't find crate

error: aborting due to previous error

For more information about this error, try `rustc --explain E0463`.
error: Could not compile `cargo_issue_6659`.

Caused by:
  process didn't exit successfully: `rustc --edition=2018 --crate-name tester tests/tester.rs --color always --emit=dep-info,link -C debuginfo=2 --test -C metadata=0525a91fc572753f -C extra-filename=-0525a91fc572753f --out-dir /home/cfkaran2/Desktop/cargo_issue_6659/target/debug/deps -C incremental=/home/cfkaran2/Desktop/cargo_issue_6659/target/debug/incremental -L dependency=/home/cfkaran2/Desktop/cargo_issue_6659/target/debug/deps` (exit code: 1)
warning: build failed, waiting for other jobs to finish...
error: build failed

脚步

  1. https://github.com/ckaran/cargo_issue_6659查看存储库
  2. 按照README.md

可能的解决方案)

无人知晓。

笔记

$ cargo -V -vvv
cargo 1.32.0 (8610973aa 2019-01-02)
release: 1.32.0
commit-hash: 8610973aaf48615ba7dc9a38a9a2795ba6f36a31
commit-date: 2019-01-02

$ rustc -Vv
rustc 1.32.0 (9fda7c223 2019-01-16)
binary: rustc
commit-hash: 9fda7c2237db910e41d6a712e9a2139b352e558b
commit-date: 2019-01-16
host: x86_64-unknown-linux-gnu
release: 1.32.0
LLVM version: 8.0

$ uname -a
Linux EMANE 4.15.0-45-generic #48-Ubuntu SMP Tue Jan 29 16:28:13 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux

$ lsb_release --all
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 18.04.2 LTS
Release:    18.04
Codename:   bionic
A-crate-types A-documenting-cargo-itself

最有用的评论

您可以将rlib (或lib )添加到crate-type列表中,它应该可以工作。 测试无法链接到 cdylib。

顺便说一句,你的例子中有一个错字, tests/tester.rs应该有extern crate cargo_issue_6659;

所有3条评论

您可以将rlib (或lib )添加到crate-type列表中,它应该可以工作。 测试无法链接到 cdylib。

顺便说一句,你的例子中有一个错字, tests/tester.rs应该有extern crate cargo_issue_6659;

啊,抱歉,由于创建与问题名称相同的存储库之间存在先有鸡还是先有蛋的问题,因此我有时会忘记更改名称。 现在固定了。

至于设置为rliblib ,问题是我使用的是pyo3 ,它说您必须将库类型设置为cdylib ,并且没有我的集成测试的工作让我感到惊讶。 如果已知测试无法链接到cdylib类型库,则可能值得更新cargo的(或者可能是rustc的)文档以反映这一事实.

是的,板条箱类型的文档总体上肯定可以改进。

如果您遇到任何其他问题,请随时在此处发表更多评论。 否则,我会将其作为文档问题保留。

此页面是否有帮助?
0 / 5 - 0 等级