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

Ubuntu 20.04下CMake配置libusb依赖找不到USB1包如何解决

问题根因

你当前触发了CMake find_package 的配置模式查找逻辑,但libusb官方源码默认不提供USB1Config.cmake这类配置文件,正常走模块模式查找才对,查找失败的核心原因是你拷贝的FindUSB1.cmake没有被CMake正确识别加载。

解决方法

你可以二选一使用以下方案:

方案1:修复现有Find模块加载逻辑

  • 第一步:确认你从Ubertooth仓库拷贝的文件中包含FindUSB1.cmake,且该文件确实存放在你指定的模块目录下
  • 第二步:在CMakeLists.txt的find_package(USB1 REQUIRED)代码之前,添加模块路径声明,确保CMake能找到你存放的Find模块:
# 替换后面的路径为你实际存放Find*.cmake文件的项目内相对路径
set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake/modules ${CMAKE_MODULE_PATH})

注:Ubertooth能正常编译是因为它的host根目录CMakeLists.txt已经提前把自带的cmake/modules目录加入了全局模块路径,子目录调用find_package时可以直接找到自带的FindUSB1.cmake走模块模式查找,不需要找配置文件。

方案2:直接用pkgconfig查找(不需要额外带Find模块,更稳定)

Ubuntu安装的libusb-1.0-0-dev自带pkg-config配置文件,你可以直接替换原有find_package逻辑:

# 先查找pkgconfig工具
find_package(PkgConfig REQUIRED)
# 通过pkgconfig查找libusb-1.0
pkg_check_modules(USB1 REQUIRED libusb-1.0)

# 后续链接你的目标时,直接使用下面的变量即可
# 示例:
# target_include_directories(你的目标名 PUBLIC ${USB1_INCLUDE_DIRS})
# target_link_libraries(你的目标名 ${USB1_LIBRARIES})
# target_link_directories(你的目标名 PUBLIC ${USB1_LIBRARY_DIRS})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 11:06:06