Ubuntu 20.04下搞定gici-open编译:从glog报错到ceres版本冲突的保姆级排坑指南
Ubuntu 20.04下gici-open编译全攻略从依赖管理到实战调试在GNSS/INS/Camera多传感器融合领域gici-open作为上海交通大学最新开源的高精度定位框架凭借其整合RTKLIB、OKVIS等知名算法的优势正成为研究者和工程师关注的焦点。然而当你在Ubuntu 20.04环境下尝试编译这个前沿项目时很可能会遭遇比普通开源库更复杂的依赖地狱——从glog的幽灵冲突到ceres-solver的版本陷阱每一步都可能让编译进程戛然而止。本文将带你系统性地攻克这些技术难点不仅提供解决方案更会揭示问题背后的原理。1. 环境准备构建稳健的编译基础在开始gici-open的编译之前我们需要确保系统具备完整且兼容的底层依赖。Ubuntu 20.04默认的软件仓库虽然丰富但直接apt install安装的版本往往无法满足专业计算框架的需求。必备工具链安装sudo apt update sudo apt install -y \ build-essential \ cmake \ git \ libatlas-base-dev \ libsuitesparse-dev对于gflags和glog这对黄金组合建议从源码编译安装以获得最佳兼容性。以下是经过验证的安装流程首先解决gflags的依赖git clone https://github.com/gflags/gflags.git cd gflags mkdir build cd build cmake -DBUILD_SHARED_LIBSON -DINSTALL_HEADERSON .. make -j$(nproc) sudo make install接着安装glog注意链接顺序git clone https://github.com/google/glog cd glog mkdir build cd build cmake -DBUILD_SHARED_LIBSON -DCMAKE_CXX_FLAGS-fPIC .. make -j$(nproc) sudo make install关键提示务必保持gflags和glog的安装顺序并确保LD_LIBRARY_PATH包含/usr/local/lib可通过export LD_LIBRARY_PATH/usr/local/lib:$LD_LIBRARY_PATH临时设置或写入~/.bashrc永久生效。2. Ceres Solver版本管理避开依赖冲突雷区gici-open对Ceres Solver的版本要求较为严格官方推荐使用2.1.0及以上版本。Ubuntu 20.04默认仓库中的Ceres版本通常较旧我们需要手动编译安装。Ceres Solver定制化安装步骤安装额外依赖sudo apt install -y libgoogle-glog-dev libgflags-dev \ libeigen3-dev libsuitesparse-dev从源码编译以2.1.0为例wget ceres-solver.org/ceres-solver-2.1.0.tar.gz tar zxf ceres-solver-2.1.0.tar.gz cd ceres-solver-2.1.0 mkdir build cd build cmake .. -DEXPORT_BUILD_DIRON \ -DBUILD_EXAMPLESOFF \ -DBUILD_TESTINGOFF make -j$(nproc) sudo make install安装完成后需要在gici-open的CMakeLists.txt中显式指定Ceres路径。在project(gici-open)语句后添加set(Ceres_DIR /usr/local/lib/cmake/Ceres) find_package(Ceres REQUIRED)版本冲突诊断技巧 当遇到链接错误时使用ldd工具检查二进制文件的依赖关系ldd /usr/local/lib/libceres.so.2.1.0若发现多个版本的Ceres共存可通过locate ceres | grep lib定位所有安装位置然后使用sudo rm -rf谨慎清理旧版本建议先备份。3. glog报错深度解析根治重复定义顽疾flag logtostderr was defined more than once这类错误通常源于系统中存在多个glog版本。Ubuntu环境下常见的问题来源包括通过apt安装的libgoogle-glog-devROS系统自带的glog组件手动编译安装的glog版本系统级清理方案全面检测glog安装情况dpkg -l | grep glog # 检查deb安装包 locate libglog | grep /usr # 查找所有库文件彻底移除冲突版本谨慎操作sudo apt remove --purge libgoogle-glog-dev sudo rm -rf /usr/lib/x86_64-linux-gnu/libglog* sudo rm -rf /usr/local/lib/libglog*重新安装纯净版本cd glog/build # 之前源码编译的目录 sudo make uninstall make clean cmake .. -DCMAKE_INSTALL_PREFIX/usr/local make -j$(nproc) sudo make install链接顺序优化 在gici-open的CMakeLists.txt中确保glog的链接顺序正确target_link_libraries(your_target PRIVATE glog::glog # 其他依赖项... )4. ROS集成特别处理cv_bridge兼容方案对于需要ROS集成的用户cv_bridge的版本冲突是常见痛点。不同于暴力删除系统组件我们推荐更安全的虚拟环境方案。ROS Noetic下的稳健配置创建独立工作空间mkdir -p ~/gici_ws/src cd ~/gici_ws catkin config --init --mkdirs --extend /opt/ros/noetic解决OpenCV冲突sudo apt install ros-noetic-cv-bridge \ ros-noetic-image-transport定制编译选项 在catkin_make时指定OpenCV版本catkin_make -DOpenCV_DIR/usr/include/opencv4关键文件对比表文件类型系统默认位置自定义安装位置优先级设置OpenCV/usr/include/opencv4/usr/local/include/opencv4CMAKE_PREFIX_PATHcv_bridge/opt/ros/noetic~/custom_installROS_PACKAGE_PATHCeres/usr/lib/cmake/usr/local/lib/cmakeCeres_DIR当所有编译完成后运行示例数据集前请确保配置文件路径正确使用绝对路径数据集时间戳与配置匹配端口未被占用特别是RTKLIB连接时通过这套系统化的编译和调试方法你应该能够顺利越过gici-open在Ubuntu 20.04上的各种编译障碍。记住精确的版本控制和干净的依赖管理是成功的关键——这比任何暴力删除都更有效。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2574494.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!