x86 Linux ceres库编译(麒麟V10 SP1)

首先可以参考我前期的一篇博客,基本上涵盖了ceres库的整体编译方法,只是中间遇到的问题可能会各种不同
Arm Linux ceres库编译(树莓派5上编译)

解决问题参考链接:
1、ubuntu20.04(ros-noetic)编译cartographer出现undefined reference to `absl::lts_20211102问题的解决办法
2、Ubuntu 20.04.05安装ceres-1.14.0
3、Google Test(GTEST)使用入门(1)- 下载编译安装执行

相关博客:
1、Arm Linux ceres库编译(树莓派5上编译)
2、linux ceres库编译注意事项及测试demo

一、使用最新的麒麟V10操作系统

由于开始在老机器上编译,gcc版本和cmake版本过老,导致无法编译。升级这些又很麻烦,所以更换了最新操作系统,重新编译,中间走的弯路详见后面的“附:老麒麟系统上的弯路”篇章。
因为更换系统后,编译期间遇到了很多问题一直没有解决,所以这个博客没有办法继续,通过不断努力,花了大半个星期不断尝试,终于在新的麒麟操作系统上编译成功了,特此记录中间弯路

1、基本信息

操作系统信息

在这里插入图片描述

cmake版本

ceres 要求cmake版本不低于3.16,该系统cmake版本符合要求
在这里插入图片描述

gcc版本

gcc版本9.3.0
在这里插入图片描述

源代码共享

源代码与上一篇用的是一样的,源码包包含ceres库、abseil库、GTest库、cmake3.30.8
优快云下载链接:https://download.youkuaiyun.com/download/weixin_42727069/90523593

2、在线安装相关依赖

下面这些在线安装的东西,默认是系统都没有的,如果系统有,且版本符合要求,可以跳过对应的安装。这部分内容与我树莓派上编译安装方法是一样的,都是高版本基本上没有什么问题

2.1、安装cmake

sudo apt-get install cmake

检查cmake版本,要求版本不低于3.16

cmake --version

2.2、安装google-glog + gflags

sudo apt-get install libgoogle-glog-dev

2.3、安装 BLAS & LAPACK

sudo apt-get install libatlas-base-dev

2.4、安装 Eigen3

sudo apt-get install libeigen3-dev

2.5、安装SuiteSparse

sudo apt-get install libsuitesparse-dev

2、离线手动编译部分

2.1、编译absl库

这部分有所不同,主要困在这里,如果按照以前操作方法编译,也可以顺利编译过,但是在编译ceres的时候会在73%左右出现错误
错误信息如下:
在这里插入图片描述
按照deepseek建议搞了一下,还是有下面的错误
在这里插入图片描述
后面参考了文章开头的那个参考链接解决方法,所以这里就直接一步到位,写出正确的编译方式

cd abseil-cpp
mkdir build
cd build

#关键是增加-DCMAKE_CXX_STANDARD=17这段话
cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local -DCMAKE_CXX_STANDARD=17

#编译在build文件夹下
make

#安装在系统内
sudo make install 

2.2、编译GTest库

对于这个库,也困扰了我很久,倒不是因为这个库难得编译,而是这个库编译成功后在后面ceres库编译的时候还是报错,错误详情如下

在这里插入图片描述
对于这个错误后面采用忽略模式解决的,具体后面在编译ceres库的时候增加了一个配置解决的,这种方法是deepseek建议的。
GTest库的编译方法还是按照上一篇的操作

cd googletest
mkdir build
cd build

cmake ..
make
sudo make install

2.3、编译ceres库

终于到了这里了,在这里反复操作了很多次,终于编译过了

#注意cmake后面的精髓是-DBUILD_TESTING=OFF 忽略了GTest部分编译,我在这里困了很久,用低版本googletest1.8.1和高版本googletest1.14.0都进行了测试,错误也不一样,但是错误的位置是一样,都是在26%的时候报错,增加了这一段后问题解决了。

cd ceres-solver
mkdir build
cd build

cmake .. -DBUILD_TESTING=OFF 

make

sudo make install

make成功界面
在这里插入图片描述
install成功界面
在这里插入图片描述

至此,终于x86 linux ceres编译成功了,特此记录!!!——辉 2025.4.10

2025.4.15 附加:
比较粗心,事实上在sudo make install的时候并没有成功安装,注意下图(这样会导致在进行C++工程编译的时候有各种错误)
在这里插入图片描述
这个问题和上个版本在arm上编译遇到的问题是一样的,就是没有设置absl的版本号,所以重新增加版本号设置,再来一次即可

cmake .. -DBUILD_TESTING=OFF -Dabsl_VERSION=20250321 
make 
sudo make install 

最终成功界面如下,会在本地/usr/local目录下进行
在这里插入图片描述

在这里插入图片描述
至此,x86 麒麟上完美编译成功了

附:老麒麟系统上的弯路

那个虚拟机一直用于测试,有四五年了,麒麟系统信息如下
在这里插入图片描述
开始编译就遇到了各种问题,主要是系统版本较低,导致的

麒麟系统下编译遇到的问题:

问题1,cmake版本过低,升级cmake

执行cmake … -DCMAKE_INSTALL_PREFIX=/usr/local命令时,提示下面错误,该错误主要是说要求cmake版本不低于3.16,我的版本为3.10.2
在这里插入图片描述

1.1、查看cmake版本

在这里插入图片描述
在网上查找了很多方法,我觉得不怎么靠谱,卸载cmake再安装都试过,没有什么用。最后只能使用杀手锏,源码编译安装
参考链接:
升级Cmake

1.2、源码下载

推荐cmake官网下载:官网地址
选择源码下载,如下图:
在这里插入图片描述
有时候会下载出错,多试几次就成功。文章开头我会把我下载的所有待编译库的源码共享出来,也可以通过我提供的地址进行下载。

1.3、源码编译

解压安装包

tar -zxvf cmake-3.30.8.tar.gz

进入目录进行编译

cd cmake-3.30.8
./bootstrap --prefix=/usr
sudo make
sudo make install

注意:./bootstrap --prefix=/usr 这一步很关键,如果没有指定prefix,后面使用时会报错Could not find CMAKE_ROOT

执行完后再去查看cmake版本,发现已经变过来了
在这里插入图片描述

问题2,absl/time/time.cc编译问题,absl::Duration

cmake版本升级成功了,继续执行cmake … -DCMAKE_INSTALL_PREFIX=/usr/local命令时,提示下面错误,该错误主要是说absl::Duration相关的constexpr函数调用上
在这里插入图片描述
deepseek解释:
在这里插入图片描述
感觉是GCC版本低了
树莓派arm版本的gcc
在这里插入图片描述
虚拟机上的gcc版本:
在这里插入图片描述

升级gcc比较麻烦。算了,重新安装新版本麒麟系统,再编译看看吧(未完待续 . . .)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值