尝试 Bindgen 教程时看到 bzlib.h 未找到

fmc*_*046 8 rust rust-bindgen

我知道有一篇与此类似的帖子,但我关注了它,但我仍然看到这个问题,所以我想我会再次询问,抱歉。我下载了 bbindgen-tutorial-bzip2-sys 并尝试运行它,但出现以下错误

  wrapper.h:1:10: fatal error: 'bzlib.h' file not found
  wrapper.h:1:10: fatal error: 'bzlib.h' file not found, err: true
Run Code Online (Sandbox Code Playgroud)

另一位用户建议降级 .toml 中的 Bindgen 版本,我尝试了,但仍然看到问题,我还验证了 bzip2 是否已安装。

是否有已知的 clang 版本可与 Bindgen 配合使用?

谢谢

-------------------------------------------------- - - -更新 - - - - - - - - - - - - - - - - - - - - - - ----------------------

因此,我安装了 dev bzip 文件,并通过将路径添加到 LD_LIBRARY_PATH 然后使用 ldconfig 进行更新来验证该库是否位于 ld 查看的文件夹中。我现在可以在运行 CARGO BUILD 时进行编译,

fred@fred-MS-7B06:~/rust_projects/bindgen-tutorial-bzip2-sys-master$ cargo build
    Finished dev [unoptimized + debuginfo] target(s) in 0.02s
Run Code Online (Sandbox Code Playgroud)

但是现在当我尝试使用 CARGO TEST 运行程序时,按照教程

https://rust-lang.github.io/rust-bindgen/print.html#include-the- generated-bindings-in-srclibrs

我现在收到以下错误:

  = note: /bin/ld: cannot find -lbz2
          collect2: error: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)

我发现一个帖子似乎有同样的问题:

https://dev.to/rrampage/cargo-refused-to-build-my-project---a-rust-debugging-story-25e9

他们通过添加 config.toml 文件并指定链接器来修复它,我尝试了这个,但仍然遇到相同的错误。关于我可以检查什么的任何想法我对这个有点卡住了。

我还检查了从网站下载的 bzip2 dev 文件:

https://www.sourceware.org/bzip2/

我注意到没有名为 bz2 的文件,但有一个 libbz2.def 和一个 libbz2.dsp 文件,是否有可能我的 ld 错误地从名称中删除了“lib”?

小智 9

正如@Jmb 在评论中指出的,我需要安装 libbz2-dev:

sudo apt install libbz2-dev
Run Code Online (Sandbox Code Playgroud)

由于这是 Ubuntu 的一个相当新的 WSL 实例,因此我还需要 libclang-dev:

sudo apt install libclang-dev
Run Code Online (Sandbox Code Playgroud)