【发布时间】:2021-02-19 05:39:40
【问题描述】:
我正在 Ubuntu 20.04.2 LTS 64 位上开发我的 Rust 项目。我已经设置项目来编译主机架构(使用cargo build)并交叉编译ARM 64位的目标架构(使用cargo build --target=aarch64-unknown-linux-gnu)。到目前为止,该项目一直在交叉编译。在目标硬件平台上有应用程序将与之交互的串行端口,因此我将Serial Port crate 添加到我的项目中。该项目对于 Ubuntu 主机架构仍然可以正常编译,但我无法再让它为 aarch64 目标进行交叉编译。
我已将目标添加到 rustup:
$ rustup target list
...
aarch64-fuchsia
aarch64-linux-android
aarch64-pc-windows-msvc
aarch64-unknown-linux-gnu (installed)
aarch64-unknown-linux-musl
aarch64-unknown-none
aarch64-unknown-none-softfloat
...
而且我已经安装了 rustup 的工具链:
$ rustup toolchain list
stable-aarch64-unknown-linux-gnu
stable-x86_64-unknown-linux-gnu (default)
当我运行 cargo build --target=aarch64-unknown-linux-gnu 的 cargo build 命令时,在编译过程中出现以下错误:
$ cargo build --target=aarch64-unknown-linux-gnu
Compiling libudev-sys v0.1.4
error: failed to run custom build command for `libudev-sys v0.1.4`
Caused by:
process didn't exit successfully: `/mnt/hgfs/trunk/src/application/target/debug/build/libudev-sys-c6234f1891f55461/build-script-build` (exit code: 101)
--- stdout
cargo:rerun-if-env-changed=LIBUDEV_NO_PKG_CONFIG
cargo:rerun-if-env-changed=PKG_CONFIG_ALLOW_CROSS_aarch64-unknown-linux-gnu
cargo:rerun-if-env-changed=PKG_CONFIG_ALLOW_CROSS_aarch64_unknown_linux_gnu
cargo:rerun-if-env-changed=TARGET_PKG_CONFIG_ALLOW_CROSS
cargo:rerun-if-env-changed=PKG_CONFIG_ALLOW_CROSS
cargo:rerun-if-env-changed=PKG_CONFIG_aarch64-unknown-linux-gnu
cargo:rerun-if-env-changed=PKG_CONFIG_aarch64_unknown_linux_gnu
cargo:rerun-if-env-changed=TARGET_PKG_CONFIG
cargo:rerun-if-env-changed=PKG_CONFIG
cargo:rerun-if-env-changed=PKG_CONFIG_SYSROOT_DIR_aarch64-unknown-linux-gnu
cargo:rerun-if-env-changed=PKG_CONFIG_SYSROOT_DIR_aarch64_unknown_linux_gnu
cargo:rerun-if-env-changed=TARGET_PKG_CONFIG_SYSROOT_DIR
cargo:rerun-if-env-changed=PKG_CONFIG_SYSROOT_DIR
--- stderr
thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: "pkg-config has not been configured to support cross-compilation.\n\n Install a sysroot for the target platform and configure it via\n PKG_CONFIG_SYSROOT_DIR and PKG_CONFIG_PATH, or install a\n cross-compiling wrapper for pkg-config and set it via\n PKG_CONFIG environment variable."', /home/nocker/.cargo/registry/src/github.com-1ecc6299db9ec823/libudev-sys-0.1.4/build.rs:38:41
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
warning: build failed, waiting for other jobs to finish...
error: build failed
我已经安装了pkg-config 和libudev-dev。从终端我可以得到这个输出来确认 pkg-config 已安装:
$ pkg-config --version
0.29.1
但是当我尝试检查是否安装了 libudev 时,我得到一个错误响应:
$ libudev
libudev: command not found
$ libudev-dev
libudev-dev: command not found
当我再次尝试安装 libudev 时,我得到:
$ sudo apt install libudev-dev
Reading package lists... Done
Building dependency tree
Reading state information... Done
libudev-dev is already the newest version (245.4-4ubuntu3.4).
0 upgraded, 0 newly installed, 0 to remove and 15 not upgraded.
当我尝试安装 libudev-sys 时,我得到:
$ sudo apt install libudev-sys
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to locate package libudev-sys
我怀疑我无法交叉编译的原因是因为 libudev 但无法弄清楚。几天来我一直在尝试研究如何解决这个问题,但没有找到解决方案。任何帮助或指导将不胜感激。 TIA。
【问题讨论】:
标签: linux rust serial-port cross-compiling arm64