Hummingbird_Joe 2023-09-22 11:59 采纳率: 81.8%
浏览 96

Ubuntu18.04安装ceres-solver时发生的编译问题

我尝试在实验室的Linux服务器上安装ceres-solver(https://github.com/ceres-solver/ceres-solver),因为我没有root权限,所以尝试下载Zip文件并解压缩后使用CMake进行构建。但是在执行make install时出现了问题。

下面是我的所有 Linux 命令。

tar -zxf ceres-solver-2.0.0.tar.gz
cd ceres-solver-2.0.0/
mkdir build
cd build
cmake -DCMAKE_INSTALL_PREFIX=/home/zhangzb/include/Ceres/ -DCMAKE_PREFIX_PATH=/home/zhangzb/include/Glog -DCMAKE_PREFIX_PATH=/home/zhangzb/include/eigen3/ -DCMAKE_PREFIX_PATH=/home/zhangzb/include/Gflags/ -Dglog_DIR=/home/zhangzb/include/Glog  ..
make install

在执行cmake命令后,一切都正常进行。但在执行make install命令后,出现了以下问题

make[2]: *** No rule to make target '/tmp/build/80754af9/snappy_1649923748780/_build_env/x86_64-conda-linux-gnu/sysroot/usr/lib/librt.so', needed by 'bin/small_blas_gemv_benchmark'.  Stop.
CMakeFiles/Makefile2:3192: recipe for target 'internal/ceres/CMakeFiles/small_blas_gemv_benchmark.dir/all' failed
make[1]: *** [internal/ceres/CMakeFiles/small_blas_gemv_benchmark.dir/all] Error 2
Makefile:145: recipe for target 'all' failed
make: *** [all] Error 2

我注意到它试图在/tmp/build/80754af9/snappy_1649923748780/_build_env/x86_64-conda-linux-gnu/sysroot/usr/lib/librt.so中查找librt.so,但librt.so位于/usr/lib/x86_64-linux-gnu/中。

zhangzb@master:~/include/ceres-solver-2.0.0/build$ ls -l /usr/lib/x86_64-linux-gnu/librt.so
lrwxrwxrwx 1 root root 32 5 3 2022 /usr/lib/x86_64-linux-gnu/librt.so -> /lib/x86_64-linux-gnu/librt.so.

我希望它可以在正确的位置(/usr/lib/x86_64-linux-gnu/librt.so)找到librt.so,这样我就可以成功安装Ceres Solver。

  • 写回答

3条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2023-09-22 12:26
    关注

    引用 皆我百晓生 小程序回复内容作答:
    这个问题可能是因为CMake在查找依赖库时使用了错误的路径。你可以尝试以下解决方法:

    1. 在运行cmake之前,先将当前路径(build目录)添加到LD_LIBRARY_PATH环境变量中,命令如下:
      export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu/:$LD_LIBRARY_PATH

    2. 修改你的cmake命令,将默认的库路径更改为正确的路径(/usr/lib/x86_64-linux-gnu/),例如:
      cmake -DCMAKE_INSTALL_PREFIX=/home/zhangzb/include/Ceres/ -DCMAKE_PREFIX_PATH=/home/zhangzb/include/Glog -DCMAKE_PREFIX_PATH=/home/zhangzb/include/eigen3/ -DCMAKE_PREFIX_PATH=/home/zhangzb/include/Gflags/ -Dglog_DIR=/home/zhangzb/include/Glog -DLIBRARY_OUTPUT_PATH=/usr/lib/x86_64-linux-gnu/ ..

    3. 如果以上方法仍然无效,你可以尝试手动将librt.so链接到/tmp/build/80754af9/snappy_1649923748780/_build_env/x86_64-conda-linux-gnu/sysroot/usr/lib/目录中,命令如下:
      ln -s /usr/lib/x86_64-linux-gnu/librt.so /tmp/build/80754af9/snappy_1649923748780/_build_env/x86_64-conda-linux-gnu/sysroot/usr/lib/

    尝试以上解决方法后,重新执行make install命令,看看问题是否解决。如果仍然存在问题,请检查其他依赖库的路径是否正确,并进行类似的修复操作。希望这些方法对你有帮助!

    评论

报告相同问题?

问题事件

  • 修改了问题 9月22日
  • 创建了问题 9月22日

悬赏问题

  • ¥15 三极管电路求解,已知电阻电压和三级关放大倍数
  • ¥15 ADS时域 连续相位观察方法
  • ¥15 Opencv配置出错
  • ¥15 模电中二极管,三极管和电容的应用
  • ¥15 关于模型导入UNITY的.FBX: Check external application preferences.警告。
  • ¥15 气象网格数据与卫星轨道数据如何匹配
  • ¥100 java ee ssm项目 悬赏,感兴趣直接联系我
  • ¥15 微软账户问题不小心注销了好像
  • ¥15 x264库中预测模式字IPM、运动向量差MVD、量化后的DCT系数的位置
  • ¥15 curl 命令调用正常,程序调用报 java.net.ConnectException: connection refused