You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

交叉编译Qt5.13.1 for BeagleBone Black报udev未定义引用错误

Qt 5.13.1 交叉编译至BeagleBone Black时canbusutil链接阶段报libudev未定义引用错误

错误根因

所有报错的未定义符号均属于LIBUDEV_183版本的libudev库接口,问题本质为两点:

  1. 链接canbusutil的命令行未加入-ludev链接参数,QtSerialPort模块依赖libudev实现串口设备枚举,该依赖没有在链接下游可执行文件时被正确传递
  2. 需提前确认交叉编译使用的sysroot中存在ARM架构、版本符合要求(包含LIBUDEV_183符号集)的libudev库,否则即使加了链接参数也会触发同类错误

排查&解决步骤

  • 第一步:校验sysroot内的libudev完整性
    进入sysroot目录/home/yash/BBB/sysroot,搜索libudev.so*文件,常规存放路径为usr/lib/arm-linux-gnueabihf/libudev.so。执行以下命令验证符号是否存在:
    /home/yash/BBB/gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-readelf -s /home/yash/BBB/sysroot/usr/lib/arm-linux-gnueabihf/libudev.so | grep LIBUDEV_183
    
    如果命令无输出,说明sysroot内的libudev版本过低或者文件缺失,需要将BeagleBone Black设备上/lib、/usr/lib路径下的libudev相关库文件、/usr/include下的libudev头文件完整同步到sysroot对应路径,重建软链接保证libudev.so指向正确的版本文件。
  • 方案1:临时修复(无需全量重编)
    进入报错目录/home/yash/BBB/qt-everywhere-src-5.13.1/qtserialbus/src/tools/canbusutil,打开当前目录下的Makefile,找到LIBS =开头的行,在行尾追加-ludev,保存后回到Qt源码根目录重新执行make install即可继续编译流程。
  • 方案2:永久修复(避免后续其他模块出现同类错误)
    执行make distclean清理所有编译缓存,重新运行configure前,在LDFLAGS环境变量中显式追加libudev的链接参数和库路径,示例:
    export LDFLAGS="-L/home/yash/BBB/sysroot/usr/lib/arm-linux-gnueabihf -ludev"
    # 再执行你之前使用的configure命令
    
    配置完成后重新执行make -j$(nproc)、make install即可。
  • 方案3:跳过不需要的模块
    如果你不需要使用Qt串口、CAN总线相关功能,可以在configure参数中追加-skip qtserialport -skip qtserialbus,直接跳过这两个模块的编译安装,从根源上避免该错误,适合只需要Qt基础GUI、核心功能的场景。

内容的提问来源于stack exchange,提问作者Yash_r

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.02 08:51:28