Ceres Solver 2.0.0编译报错:无法定位librt.so目标文件
解决Ceres Solver编译时找不到librt.so的问题
问题分析
编译Ceres Solver 2.0.0时,make install报错找不到librt.so,程序错误地在conda临时构建路径/tmp/build/80754af9/snappy_1649923748780/_build_env/x86_64-conda-linux-gnu/sysroot/usr/lib/中查找该库,而实际库位于/usr/lib/x86_64-linux-gnu/。这是CMake缓存了旧的conda环境路径导致的。
解决方案
方案1:修正CMake参数并关闭Benchmark编译(推荐)
- 清理现有build目录的缓存文件:
cd /home/zhangzb/include/ceres-solver-2.0.0/build rm -rf ./*
- 重新执行CMake命令,合并
CMAKE_PREFIX_PATH路径(用分号分隔),添加系统库路径并关闭Benchmark编译:
cmake -DCMAKE_INSTALL_PREFIX=/home/zhangzb/include/Ceres/ \ -DCMAKE_PREFIX_PATH="/home/zhangzb/include/Glog;/home/zhangzb/include/eigen3;/home/zhangzb/include/Gflags" \ -Dglog_DIR=/home/zhangzb/include/Glog \ -DCMAKE_LIBRARY_PATH="/usr/lib/x86_64-linux-gnu" \ -DBUILD_BENCHMARKS=OFF \ ..
- 编译并安装:
make -j$(nproc) make install
方案2:手动创建软链接(临时 workaround)
如果方案1无效,可以临时创建软链接让程序定位到正确库文件:
mkdir -p /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/librt.so
之后再执行make install即可。注意该路径是临时的,服务器重启后可能需要重新创建。
内容的提问来源于stack exchange,提问作者Joe
相关产品推荐
相关产品推荐

