1、安装Protobuf

协议缓冲区(Protocol Buffers,又名protobuf)是谷歌的语言无关、平台无关、用于序列化结构化数据的可扩展机制。源码可以在GitHub下载:GitHub - protocolbuffers/protobuf: Protocol Buffers - Google's data interchange format

下载后进行解压,以3.17.3版本为例。

解压后进入目录,创建并build目录,

mkdir build

cd build

mkdir build
cd build

编译采用Ninja工具进行构建,需要安装:

sudo apt install ninja-build

sudo apt install ninja-build 

安装完后,执行编译

cmake -G Ninja \
  -DCMAKE_INSTALL_PREFIX=/opt/3rd_party/protobuf-3.17.3 \
  -DCMAKE_POSITION_INDEPENDENT_CODE=ON \
  -DCMAKE_BUILD_TYPE=Release \
  -Dprotobuf_BUILD_TESTS=OFF \
  ../cmake

cmake -G Ninja \
  -DCMAKE_INSTALL_PREFIX=/opt/3rd_party/protobuf-3.17.3 \
  -DCMAKE_POSITION_INDEPENDENT_CODE=ON \
  -DCMAKE_BUILD_TYPE=Release \
  -Dprotobuf_BUILD_TESTS=OFF \
  ../cmake

 编译过后,进行配置安装

ninja
sudo ninja install

ninja
sudo ninja install

安装完成后即可使用

2、安装Ceres

Ceres Solver是一个开源c++库,用于建模和解决大型、复杂的优化问题。 它是一个特性丰富、成熟和高性能的库,自2010年以来一直在谷歌的生产中使用,安装方法:

sudo apt-get install libceres-dev

sudo apt-get install libceres-dev

安装过程:

正在读取软件包列表... 完成
正在分析软件包的依赖关系树       
正在读取状态信息... 完成       
将会同时安装下列软件:
  libamd2 libatlas3-base libbtf1 libcamd2 libccolamd2 libceres1 libcholmod3
  libcxsparse3 libgflags-dev libgflags2.2 libgoogle-glog-dev libgoogle-glog0v5
  libgraphblas1 libklu1 libldl2 libmetis5 librbio2 libspqr2 libsuitesparse-dev
  libumfpack5
下列【新】软件包将被安装:
  libamd2 libatlas3-base libbtf1 libcamd2 libccolamd2 libceres-dev libceres1
  libcholmod3 libcxsparse3 libgflags-dev libgflags2.2 libgoogle-glog-dev
  libgoogle-glog0v5 libgraphblas1 libklu1 libldl2 libmetis5 librbio2 libspqr2
  libsuitesparse-dev libumfpack5
升级了 0 个软件包,新安装了 21 个软件包,要卸载 0 个软件包,有 421 个软件包未被升级。
需要下载 8,102 kB 的归档。
解压缩后会消耗 48.9 MB 的额外空间。
您希望继续执行吗? [Y/n] y
获取:1 http://mirrors.ustc.edu.cn/ubuntu bionic/main amd64 libamd2 amd64 1:5.1.2-2 [19.5 kB]
获取:2 http://mirrors.ustc.edu.cn/ubuntu bionic/universe amd64 libatlas3-base amd64 3.10.3-5 [3,732 kB]
获取:3 http://mirrors.ustc.edu.cn/ubuntu bionic/main amd64 libbtf1 amd64 1:5.1.2-2 [10.6 kB]
获取:4 http://mirrors.ustc.edu.cn/ubuntu bionic/main amd64 libcamd2 amd64 1:5.1.2-2 [20.9 kB]
获取:5 http://mirrors.ustc.edu.cn/ubuntu bionic/main amd64 libccolamd2 amd64 1:5.1.2-2 [21.7 kB]
获取:6 http://mirrors.ustc.edu.cn/ubuntu bionic/main amd64 libmetis5 amd64 5.1.0.dfsg-5 [169 kB]
获取:7 http://mirrors.ustc.edu.cn/ubuntu bionic/main amd64 libcholmod3 amd64 1:5.1.2-2 [300 kB]
获取:8 http://mirrors.ustc.edu.cn/ubuntu bionic/main amd64 libcxsparse3 amd64 1:5.1.2-2 [63.9 kB]
获取:9 http://mirrors.ustc.edu.cn/ubuntu bionic/universe amd64 libgflags2.2 amd64 2.2.1-1 [72.4 kB]
获取:10 http://mirrors.ustc.edu.cn/ubuntu bionic/universe amd64 libgoogle-glog0v5 amd64 0.3.5-1 [50.5 kB]
获取:11 http://mirrors.ustc.edu.cn/ubuntu bionic/main amd64 libspqr2 amd64 1:5.1.2-2 [64.2 kB]
获取:12 http://mirrors.ustc.edu.cn/ubuntu bionic/universe amd64 libceres1 amd64 1.13.0+dfsg0-2 [614 kB]
获取:13 http://mirrors.ustc.edu.cn/ubuntu bionic/universe amd64 libgflags-dev amd64 2.2.1-1 [86.1 kB]
获取:14 http://mirrors.ustc.edu.cn/ubuntu bionic/universe amd64 libgoogle-glog-dev amd64 0.3.5-1 [73.8 kB]
获取:15 http://mirrors.ustc.edu.cn/ubuntu bionic/main amd64 libgraphblas1 amd64 1:5.1.2-2 [384 kB]
获取:16 http://mirrors.ustc.edu.cn/ubuntu bionic/main amd64 libklu1 amd64 1:5.1.2-2 [69.3 kB]
获取:17 http://mirrors.ustc.edu.cn/ubuntu bionic/main amd64 libldl2 amd64 1:5.1.2-2 [10.3 kB]
获取:18 http://mirrors.ustc.edu.cn/ubuntu bionic/main amd64 libumfpack5 amd64 1:5.1.2-2 [229 kB]
获取:19 http://mirrors.ustc.edu.cn/ubuntu bionic/main amd64 librbio2 amd64 1:5.1.2-2 [24.0 kB]
获取:20 http://mirrors.ustc.edu.cn/ubuntu bionic/main amd64 libsuitesparse-dev amd64 1:5.1.2-2 [1,235 kB]
获取:21 http://mirrors.ustc.edu.cn/ubuntu bionic/universe amd64 libceres-dev amd64 1.13.0+dfsg0-2 [853 kB]
已下载 8,102 kB,耗时 1秒 (6,597 kB/s)
正在选中未选择的软件包 libamd2:amd64。
(正在读取数据库 ... 系统当前共安装有 215660 个文件和目录。)
正准备解包 .../00-libamd2_1%3a5.1.2-2_amd64.deb  ...
正在解包 libamd2:amd64 (1:5.1.2-2) ...
正在选中未选择的软件包 libatlas3-base:amd64。
正准备解包 .../01-libatlas3-base_3.10.3-5_amd64.deb  ...
正在解包 libatlas3-base:amd64 (3.10.3-5) ...
正在选中未选择的软件包 libbtf1:amd64。
正准备解包 .../02-libbtf1_1%3a5.1.2-2_amd64.deb  ...
正在解包 libbtf1:amd64 (1:5.1.2-2) ...
正在选中未选择的软件包 libcamd2:amd64。
正准备解包 .../03-libcamd2_1%3a5.1.2-2_amd64.deb  ...
正在解包 libcamd2:amd64 (1:5.1.2-2) ...
正在选中未选择的软件包 libccolamd2:amd64。
正准备解包 .../04-libccolamd2_1%3a5.1.2-2_amd64.deb  ...
正在解包 libccolamd2:amd64 (1:5.1.2-2) ...
正在选中未选择的软件包 libmetis5:amd64。
正准备解包 .../05-libmetis5_5.1.0.dfsg-5_amd64.deb  ...
正在解包 libmetis5:amd64 (5.1.0.dfsg-5) ...
正在选中未选择的软件包 libcholmod3:amd64。
正准备解包 .../06-libcholmod3_1%3a5.1.2-2_amd64.deb  ...
正在解包 libcholmod3:amd64 (1:5.1.2-2) ...
正在选中未选择的软件包 libcxsparse3:amd64。
正准备解包 .../07-libcxsparse3_1%3a5.1.2-2_amd64.deb  ...
正在解包 libcxsparse3:amd64 (1:5.1.2-2) ...
正在选中未选择的软件包 libgflags2.2。
正准备解包 .../08-libgflags2.2_2.2.1-1_amd64.deb  ...
正在解包 libgflags2.2 (2.2.1-1) ...
正在选中未选择的软件包 libgoogle-glog0v5。
正准备解包 .../09-libgoogle-glog0v5_0.3.5-1_amd64.deb  ...
正在解包 libgoogle-glog0v5 (0.3.5-1) ...
正在选中未选择的软件包 libspqr2:amd64。
正准备解包 .../10-libspqr2_1%3a5.1.2-2_amd64.deb  ...
正在解包 libspqr2:amd64 (1:5.1.2-2) ...
正在选中未选择的软件包 libceres1。
正准备解包 .../11-libceres1_1.13.0+dfsg0-2_amd64.deb  ...
正在解包 libceres1 (1.13.0+dfsg0-2) ...
正在选中未选择的软件包 libgflags-dev。
正准备解包 .../12-libgflags-dev_2.2.1-1_amd64.deb  ...
正在解包 libgflags-dev (2.2.1-1) ...
正在选中未选择的软件包 libgoogle-glog-dev。
正准备解包 .../13-libgoogle-glog-dev_0.3.5-1_amd64.deb  ...
正在解包 libgoogle-glog-dev (0.3.5-1) ...
正在选中未选择的软件包 libgraphblas1:amd64。
正准备解包 .../14-libgraphblas1_1%3a5.1.2-2_amd64.deb  ...
正在解包 libgraphblas1:amd64 (1:5.1.2-2) ...
正在选中未选择的软件包 libklu1:amd64。
正准备解包 .../15-libklu1_1%3a5.1.2-2_amd64.deb  ...
正在解包 libklu1:amd64 (1:5.1.2-2) ...
正在选中未选择的软件包 libldl2:amd64。
正准备解包 .../16-libldl2_1%3a5.1.2-2_amd64.deb  ...
正在解包 libldl2:amd64 (1:5.1.2-2) ...
正在选中未选择的软件包 libumfpack5:amd64。
正准备解包 .../17-libumfpack5_1%3a5.1.2-2_amd64.deb  ...
正在解包 libumfpack5:amd64 (1:5.1.2-2) ...
正在选中未选择的软件包 librbio2:amd64。
正准备解包 .../18-librbio2_1%3a5.1.2-2_amd64.deb  ...
正在解包 librbio2:amd64 (1:5.1.2-2) ...
正在选中未选择的软件包 libsuitesparse-dev:amd64。
正准备解包 .../19-libsuitesparse-dev_1%3a5.1.2-2_amd64.deb  ...
正在解包 libsuitesparse-dev:amd64 (1:5.1.2-2) ...
正在选中未选择的软件包 libceres-dev。
正准备解包 .../20-libceres-dev_1.13.0+dfsg0-2_amd64.deb  ...
正在解包 libceres-dev (1.13.0+dfsg0-2) ...
正在设置 libbtf1:amd64 (1:5.1.2-2) ...
正在设置 libldl2:amd64 (1:5.1.2-2) ...
正在设置 libatlas3-base:amd64 (3.10.3-5) ...
update-alternatives: 使用 /usr/lib/x86_64-linux-gnu/atlas/libblas.so.3 来在自动模式中提供 /usr/lib/x86_64-linux-gnu/libblas.so.3 (libblas.so.3-x86_64-linux-gnu)
update-alternatives: 使用 /usr/lib/x86_64-linux-gnu/atlas/liblapack.so.3 来在自动模式中提供 /usr/lib/x86_64-linux-gnu/liblapack.so.3 (liblapack.so.3-x86_64-linux-gnu)
正在设置 libcxsparse3:amd64 (1:5.1.2-2) ...
正在设置 libgflags2.2 (2.2.1-1) ...
正在设置 libgflags-dev (2.2.1-1) ...
正在设置 libgraphblas1:amd64 (1:5.1.2-2) ...
正在设置 librbio2:amd64 (1:5.1.2-2) ...
正在设置 libcamd2:amd64 (1:5.1.2-2) ...
正在设置 libamd2:amd64 (1:5.1.2-2) ...
正在设置 libgoogle-glog0v5 (0.3.5-1) ...
正在设置 libmetis5:amd64 (5.1.0.dfsg-5) ...
正在设置 libccolamd2:amd64 (1:5.1.2-2) ...
正在设置 libgoogle-glog-dev (0.3.5-1) ...
正在设置 libklu1:amd64 (1:5.1.2-2) ...
正在设置 libcholmod3:amd64 (1:5.1.2-2) ...
正在设置 libspqr2:amd64 (1:5.1.2-2) ...
正在设置 libumfpack5:amd64 (1:5.1.2-2) ...
正在设置 libceres1 (1.13.0+dfsg0-2) ...
正在设置 libsuitesparse-dev:amd64 (1:5.1.2-2) ...
正在设置 libceres-dev (1.13.0+dfsg0-2) ...
正在处理用于 libc-bin (2.27-3ubuntu1) 的触发器 ...