编译UHD init_usrp示例时CMake无法找到UHD的问题求助
编译UHD init_usrp示例时CMake找不到UHD的解决办法
问题概述
编译../host/examples/init_usrp路径下的UHD init_usrp示例时,CMake报错无法定位UHD:
- 示例的
CMakeLists.txt包含find_package(UHD 4.1.0 REQUIRED)语句 - 已从master分支编译安装UHD-4.4.0.0,使用CMake版本3.26
- 错误根源是
UHDConfig.cmake未设置UHD_LIBRARIES和UHD_INCLUDE_DIRS变量,导致get_filename_component执行失败 - 尝试替换为GNU Radio的
FindUHD.cmake后问题仍未解决
解决步骤
1. 确保CMake能找到UHD的配置文件路径
UHD编译安装后,配置文件默认在/usr/local/lib/cmake/UHD或/usr/lib/cmake/UHD。
- 先检查环境变量
CMAKE_PREFIX_PATH是否包含UHD的安装前缀(比如/usr/local):echo $CMAKE_PREFIX_PATH - 如果没有,执行CMake时手动指定路径:
或者临时设置环境变量:cmake -DUHD_DIR=/usr/local/lib/cmake/UHD ../host/examples/init_usrpexport CMAKE_PREFIX_PATH=/usr/local:$CMAKE_PREFIX_PATH
2. 调整find_package的版本匹配规则
你的UHD版本4.4.0.0高于要求的4.1.0,但可能因版本格式识别问题导致匹配失败。修改示例的CMakeLists.txt:
- 要么直接去掉版本约束:
要么强制使用UHD自带的配置文件:find_package(UHD REQUIRED)find_package(UHD 4.1.0 CONFIG REQUIRED)
3. 验证UHD安装后的配置文件完整性
打开UHD安装目录下的UHDConfig.cmake(比如/usr/local/lib/cmake/UHD/UHDConfig.cmake),确认里面有正确的变量定义:
set(UHD_INCLUDE_DIRS "/usr/local/include") set(UHD_LIBRARIES uhd)
如果没有,说明UHD编译安装过程有问题。重新编译UHD时,指定安装路径并完整执行安装:
cd uhd-host mkdir build && cd build cmake -DCMAKE_INSTALL_PREFIX=/usr/local .. make -j$(nproc) sudo make install
4. 清除CMake缓存后重试
旧的缓存可能残留错误配置,先清理再重新配置:
cd ../host/examples/init_usrp rm -f CMakeCache.txt && rm -rf CMakeFiles cmake ..
5. 手动指定UHD路径(终极方案)
如果以上方法都无效,直接在示例的CMakeLists.txt里硬编码路径:
# 替换为你的实际UHD安装路径 set(UHD_INCLUDE_DIRS "/usr/local/include") set(UHD_LIBRARIES "/usr/local/lib/libuhd.so") include_directories(${UHD_INCLUDE_DIRS}) target_link_libraries(init_usrp ${UHD_LIBRARIES})
内容的提问来源于stack exchange,提问作者Mark
相关产品推荐
相关产品推荐

