如何修复 Rust 中 `ethercat-sys v0.3.1` 的 "failed to run custom build command" 错误

问题

在尝试安装 ethercatethercat-sys crate 时,你会遇到以下问题:

ethercat-sys-build-error.txt
error: failed to run custom build command for `ethercat-sys v0.3.1`

Caused by:
  process didn't exit successfully: `/home/uli/Nextcloud/Experimental/RS402/target/debug/build/ethercat-sys-c6763acfbe4bdda5/build-script-build` (exit status: 101)
  --- stderr

  thread 'main' panicked at /home/uli/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/ethercat-sys-0.3.1/build.rs:8:46:
  Please set the ETHERCAT_PATH env var to the location of a checkout of the Ethercat master after running configure: NotPresent
  note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace

解决方案

ethercat-sys crate 是 ethercat crate 的依赖项,它需要一个本地 EtherCAT master 仓库的检出位置来构建其原生绑定。

要解决此问题,只需克隆 EtherCAT master 仓库并将 ETHERCAT_PATH 环境变量指向此检出的位置。由于 ethercat-sys crate 需要 config.h,仅克隆仓库是不够的,你还需要构建 EtherCAT master。

clone-ethercat.sh
git clone https://gitlab.com/etherlab.org/ethercat.git ~/.etherlab-ethercat
cd ~/.etherlab-ethercat
./bootstrap
./configure
make -j8

现在你可以设置 ETHERCAT_PATH 环境变量。你可以在终端会话中临时设置,但我建议将其添加到 shell 配置文件(例如 ~/.bashrc~/.zshrc)中以永久生效。

set-ethercat-path.sh
export ETHERCAT_PATH="$HOME/.etherlab-ethercat"

设置好 ETHERCAT_PATH 环境变量后,你应该就能构建依赖 ethercat crate 的 Rust 项目,而不会再遇到之前的错误。如果你已将 export 命令放入 shell 配置文件,请记得使用 source ~/.bashrc 或类似命令重新加载 shell 配置,或重启终端会话以使更改生效。

build-rust-project.sh
cargo build

Check out similar posts by category: Rust, EtherCAT