一、问题描述
自己在跟着《视觉slam14讲》第二版 第四讲学习使用 sophus 库时,make时总是报 fatal error 编译不通过,故记录此安装历程。
二、安装步骤
1. 安装 eigen 库
sophus的使用必须依赖eigen库,因此先下载eigen,但是如果你有3.3以下的版本的eigen,那么请先卸载。
1.1 判断有老版本
sudo updatedb
locate eigen3
1.2 查看已安装 eigen 版本
pkg-config --modversion eigen3
1.3 eigen 旧版本卸载
sudo rm -rf /usr/include/eigen3 /usr/lib/cmake/eigen3 /usr/share/doc/libeigen3-dev /usr/share/pkgconfig/eigen3.pc /var/lib/dpkg/info/libeigen3-dev.list /var/lib/dpkg/info/libeigen3-dev.md5sums
1.4 eigen 3.3.7版本安装
(1)在 官网 下载安装包:eigen-3.3.7.tar.bz2 ,然后提取到此处
(2)进入文件夹eigen-3.3.7,右键在终端打开。
(3)进行安装
mkdir build
cd build
cmake ..
sudo make install
PS: sudo apt-get install libeigen3-dev
该命令可能会安装下载 3.2版本的eigen,从而无法与模板类的sophus相匹配,故不建议此方法安装。
2. 安装 fmt 库
目前,sophus 需要依赖fmt库,因此优先安装fmt:
git clone https://github.com/fmtlib/fmt.git
cd fmt
mkdir build
cd build
cmake ..
make
sudo make install
PS: 下载链接
3. 安装 Sophus 库
3.1 安装
git clone https://github.com/strasdat/Sophus.git
cd Sophus/
mkdir build
cd build
cmake ..
make
sudo make install
PS:
- 网上不少教程多有回滚,即
git checkout a621ff
,这样会装成老版本的非模板 sophus,而新版本 sophus 采用的是模板类; sudo make install
一定要有。
3.2 测试
重新make,成功编译:
下图为成功运行的截图。
4. slam_14讲 error
4.1 error 描述
在 make 《视觉slam14讲》第二版 第四讲 ch4/example/trajectoryError
评估估计误差时出现 error : "undefined reference to `fmt::v8::detail::assert_fail(char const*, int, char const*)’ ",编译不通过。
4.2 问题解决
修改 CMakeLists.txt 、trajectoryError.cpp 这两个文件,具体修改如下:
- 在
ch4/example/CMakeLists.txt
文本中添加如下:
find_package(Sophus REQUIRED)
target_link_libraries(trajectoryError Sophus::Sophus)
- 在
ch4/example/trajectoryError.cpp
文本中修改如下:
// string groundtruth_file = "./groundtruth.txt";
// string estimated_file = "./estimated.txt";
string groundtruth_file = "../groundtruth.txt";
string estimated_file = "../estimated.txt";
扫描二维码关注公众号,回复:
14952947 查看本文章
4.3 测试结果
重新编译 make ,运行成功: