由于工作需要,需在国产化系统上编译ceres库,手上有一块树莓派,就在树莓派上面进行测试编译ceres库,总体来说比较顺利。只出现了一点小问题
参考链接:
Ceres中文教程-安装
按照上面Linux编译过程
目录
- 1、在线安装依赖项
- 1.1、安装CMake
- 1.2、安装google-glog + gflags
- 1.3、安装 BLAS & LAPACK
- 1.4、安装 Eigen3
- 1.5、安装SuiteSparse
- 2、编译ceres库
- 2.1下载ceres库源代码
- 2.2 编译
- 异常1、缺少absl库
- 解决方案:
- 异常2、缺少GTest库
- 解决方案:
- 2.3、继续编译
- 异常3、missing Abseil version
- 解决方案:
1、在线安装依赖项
1.1、安装CMake
sudo apt-get install cmake
1.2、安装google-glog + gflags
sudo apt-get install libgoogle-glog-dev
1.3、安装 BLAS & LAPACK
sudo apt-get install libatlas-base-dev
1.4、安装 Eigen3
sudo apt-get install libeigen3-dev
1.5、安装SuiteSparse
sudo apt-get install libsuitesparse-dev
2、编译ceres库
2.1下载ceres库源代码
git clone https://ceres-solver.googlesource.com/ceres-solver
2.2 编译
首先说明,编译结果想单独放在某个文件夹中,按照我的习惯,喜欢在源码中新建build文件夹,然后将所有编译的输出都放到build中
cd ceres-solver
mkdir build
cmake ..
注意,在cmake …容易出错(我是按照参考链接的过程进行编译的)。依次存在下面两个问题,所以在安装库前可以先把下面两个问题的源码也同样编译一遍
异常1、缺少absl库
异常输出:
CMake Error at CMakeLists.txt:173 (find_package):By not providing "Findabsl.cmake" in CMAKE_MODULE_PATH this project hasasked CMake to find a package configuration file provided by "absl", butCMake did not find one.Could not find a package configuration file provided by "absl" with any ofthe following names:abslConfig.cmakeabsl-config.cmakeAdd the installation prefix of "absl" to CMAKE_PREFIX_PATH or set"absl_DIR" to a directory containing one of the above files. If "absl"provides a separate development package or SDK, be sure it has beeninstalled.
解决方案:
参考链接:
在ubuntu安装c++版本的absl库
第一步、下载abseil库
git clone https://github.com/abseil/abseil-cpp.git
第二步、编译
cd abseil-cpp
mkdir build
cd buildcmake .. -DCMAKE_INSTALL_PREFIX=/usr/local
make -j
sudo make install
这将会将 absl 安装到 /usr/local 目录下。
安装完成后,您可以在 C++ 代码中使用 absl。例如:
#include <iostream>
#include "absl/strings/str_cat.h"int main() {std::string s = absl::StrCat("Hello, ", "world!");std::cout << s << std::endl;return 0;
}
编译时需要链接 absl 库,例如:
g++ -o main main.cpp -labsl_strings
异常2、缺少GTest库
继续cmake编译的时候,出现了异常2,异常输出
Could NOT find GTest (missing: GTEST_LIBRARY GTEST_INCLUDE_DIRGTEST_MAIN_LIBRARY) (Required is at least version "1.14.0")
解决方案:
参考链接:
gtest教程(记录小白从0学习gtest的过程)
下载GTest源码(码云)
git clone https://gitee.com/fkliuyanhong/googletest.git
编译gtest
cd googletest
mkdir build
cd buildcmake ..
make
sudo make install
两个问题解决后cmake成功了,cmake成功截图如下:
2.3、继续编译
继续向下编译,依次执行下面命令:
make -j3
make test
make install
在最后执行make install出错
异常3、missing Abseil version
CMake Error at cmake_install.cmake:46 (message):Cannot generate CeresConfig.cmake due to missing Abseil version. Usingresulting package configuration will likely result in integration errors.Set absl_VERSION manually to disable this error message.
解决方案:
这个错误是通过deepseek告诉我的解决方案
刚刚在下载absl库的时候使用的是git下载的,所以在后面直接用git log查看版本,我查到的是如下:
所以自定义版本为:20250321
然后带着版本号重新编译一遍即可,依次执行下面命令
cd build (保证还是在build目录下就行了)cmake -Dabsl_VERSION=20250321 ..
make
sudo make install
ceres库成功编译完成
至此 辉 2025.3.22