Как исправить Rust: failed to run custom build command для `ethercat-sys v0.3.1`

Проблема

При попытке установить крейт ethercat или ethercat-sys вы сталкиваетесь со следующей проблемой:

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, который является зависимостью крейта ethercat, требует расположения локальной копии репозитория мастера EtherCAT для сборки нативных привязок.

Чтобы решить эту проблему, просто клонируйте репозиторий мастера EtherCAT и установите переменную окружения ETHERCAT_PATH, указав на расположение этой копии. Поскольку крейту ethercat-sys нужен config.h, простого клонирования репозитория недостаточно; вам также нужно собрать мастера EtherCAT.

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

Теперь вы можете установить переменную окружения ETHERCAT_PATH. Вы можете сделать это временно в вашем терминале, но я рекомендую сделать это постоянно, добавив её в файл конфигурации оболочки (например, ~/.bashrc или ~/.zshrc).

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

С установленной переменной окружения ETHERCAT_PATH вы теперь сможете собрать ваш Rust-проект, зависящий от крейта ethercat, не сталкиваясь с предыдущей ошибкой. Не забудьте перезагрузить конфигурацию оболочки с помощью source ~/.bashrc или аналогичной команды, или перезапустить терминал, чтобы применить изменения, если вы поместили команду export в файл конфигурации оболочки.

build-rust-project.sh
cargo build

Check out similar posts by category: Rust, EtherCAT