树莓派Ubuntu系统UHD版本冲突:如何移除旧版本UHD_4.1.0.5-3
解决UHD版本冲突问题
一、先确认系统里的UHD版本与安装路径
先搞清楚当前系统里的UHD包分布:
- 查看apt安装的UHD相关包:
从输出里找到旧版4.1.0.5-3对应的包名,比如dpkg -l | grep uhdlibuhd4.1.0、libuhd-dev这类。 - 确认手动编译的4.4.0.0安装位置(默认在
/usr/local下):ls /usr/local/lib/libuhd.so* ls /usr/local/include/uhd
二、彻底移除系统安装的旧版UHD
直接卸载apt安装的旧版本:
- 卸载主包和开发包(替换成你查到的实际包名):
如果连带装的系统版GNU Radio也不需要,一起卸载:sudo apt remove --purge uhd libuhd-dev libuhd4.1.0sudo apt remove --purge gnuradio gnuradio-dev - 清理残留的配置和无用依赖:
sudo apt autoremove --purge - 检查是否有漏网的旧版库文件,有的话手动删除:
find /usr/lib -name "libuhd.so*" sudo rm -f /usr/lib/aarch64-linux-gnu/libuhd.so* # 替换成你找到的旧版路径
三、确保手动编译的UHD被系统优先识别
卸载旧版后,要让系统优先用你装的4.4.0.0:
- 更新动态链接库缓存:
sudo ldconfig - 验证默认UHD版本:
如果输出不是4.4.0.0,就手动添加本地库路径到链接配置:uhd_version
再重新运行sudo echo "/usr/local/lib" > /etc/ld.so.conf.d/local.conf sudo ldconfiguhd_version确认。
四、调整你的C++代码编译配置
你的代码加载旧版,大概率是编译时链接了系统旧库,要指定手动安装的UHD路径:
- 如果用CMake,修改
CMakeLists.txt:set(UHD_DIR "/usr/local/lib/cmake/UHD") find_package(UHD REQUIRED) include_directories(${UHD_INCLUDE_DIRS}) target_link_libraries(你的可执行文件名 ${UHD_LIBRARIES}) - 如果用g++直接编译,手动指定头文件和库路径:
g++ your_code.cpp -o your_executable -I/usr/local/include -L/usr/local/lib -luhd
五、验证问题是否解决
编译完代码后,查看它依赖的UHD库:
ldd ./your_executable | grep uhd
如果输出显示链接到/usr/local/lib/libuhd.so.4.4.0,再运行代码,应该就不会崩溃了。
内容的提问来源于stack exchange,提问作者Sorin
相关产品推荐
相关产品推荐

