Rust交叉编译至树莓派时libudev-sys v0.1.4构建失败求助
Rust交叉编译树莓派(armv7)解决libudev-sys构建失败问题
1. 先安装必要的交叉编译依赖
确保Ubuntu 20.04上已经安装了armhf架构的libudev开发包和交叉编译工具链:
sudo apt-get update && sudo apt-get install -y gcc-arm-linux-gnueabihf build-essential libudev-dev:armhf
2. 修正构建脚本的环境变量冲突
你的脚本中PKG_CONFIG_PATH和PKG_CONFIG_LIBDIR存在优先级冲突,导致pkgconfig无法正确找到交叉编译的libudev配置文件。调整环境变量,将armhf的pkgconfig目录合并到PKG_CONFIG_LIBDIR中:
调整后的完整脚本:
#!/bin/sh SYSROOT=/build/root export PKG_CONFIG_DIR= # 合并armhf的pkgconfig路径到LIBDIR,避免冲突 export PKG_CONFIG_LIBDIR=${SYSROOT}/usr/lib/pkgconfig:${SYSROOT}/usr/share/pkgconfig:/usr/lib/arm-linux-gnueabihf/pkgconfig export PKG_CONFIG_SYSROOT_DIR=${SYSROOT} export PKG_CONFIG_ALLOW_CROSS=1 export CARGO_TARGET_ARMV7_UNKNOWN_LINUX_GNUEABIHF_LINKER=arm-linux-gnueabihf-gcc # 强制libudev-sys指向交叉编译的库和头文件 export LIBUDEV_SYS_NO_PKG_CONFIG=0 export LIBUDEV_LIB_DIR=/usr/lib/arm-linux-gnueabihf export LIBUDEV_INCLUDE_DIR=/usr/include/libudev cargo build --release --target=armv7-unknown-linux-gnueabihf
3. 添加Rust目标平台配置(可选但推荐)
在项目根目录创建或编辑.cargo/config.toml,添加以下内容,让Rust编译器明确链接路径:
[target.armv7-unknown-linux-gnueabihf] linker = "arm-linux-gnueabihf-gcc" rustflags = [ "-C", "link-arg=-Wl,-rpath-link,/usr/lib/arm-linux-gnueabihf", "-C", "link-arg=-L/usr/lib/arm-linux-gnueabihf", ]
关键说明
- 取消
PKG_CONFIG_PATH的单独设置,改用PKG_CONFIG_LIBDIR统一管理配置文件路径,避免优先级问题 - 通过
LIBUDEV_LIB_DIR和LIBUDEV_INCLUDE_DIR直接指定libudev的交叉编译库和头文件位置,绕开pkgconfig可能的检测失误 - 确保
SYSROOT路径正确指向你的交叉编译根文件系统,如果没有自定义根文件系统,可暂时忽略该变量(但保留设置不影响)
内容的提问来源于stack exchange,提问作者Ankit Kumar
相关产品推荐
相关产品推荐

