由于工作需要,需在国产化系统上编译ceres库,手上有一块树莓派,就在树莓派上面进行测试编译ceres库,总体来说比较顺利。只出现了一点小问题
参考链接:
Ceres中文教程-安装
Ceres官方网站(英文)
按照上面Linux编译过程
系列博客:
1、x86 Linux ceres库编译(麒麟V10 SP1)
2、linux ceres库编译注意事项及测试demo
目录
共享源码包
源码包包含ceres库、abseil库、GTest库、cmake3.30.8
CSDN下载链接:https://download.csdn.net/download/weixin_42727069/90523593
1、在线安装依赖项
1.1、安装CMake
sudo apt-get install cmake
这里要注意一下,有些系统上有cmake,可以通过下面命令查看一下cmake版本,如果cmake版本低于3.16后面编译absl库的时候可能会出问题,至于怎么升级cmake可以参考博客后面升级cmke方法
cmake --version
arm系统cmake版本3.25.1
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 has
asked CMake to find a package configuration file provided by "absl", but
CMake did not find one.
Could not find a package configuration file provided by "absl" with any of
the following names:
abslConfig.cmake
absl-config.cmake
Add 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 been
installed.
解决方案:
参考链接:
在ubuntu安装c++版本的absl库
第一步、下载abseil库
git clone https://github.com/abseil/abseil-cpp.git
第二步、编译
cd abseil-cpp
mkdir build
cd build
cmake .. -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_DIR
GTEST_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 build
cmake ..
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. Using
resulting 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库成功编译完成
终极解决方案:
虽然上面编译可以成功,但是有很多后遗症,中级解决方案
首先进入github仓库:https://github.com/abseil/abseil-cpp
点击Tags
根据版本号重新下载一个与ceres库相近时间的版本进行下载,版本号就是这个Tags号,如:20230125.3
至此 辉 2025.3.22
x86麒麟操作系统上编译ceres可以参考我另一篇博客,目前已经走通了,避免本文冗长,特此分成两篇文章记录!!——辉2025.4.10
2025.4.16 重新修正