这篇文章记录s-icp编译中遇到的问题,方便下次出问题查找,也感谢网上解答的帮助。
问题一
编译semantic-icp 出现如下问题,查原因可能是sophus的版本问题。旧版本是xx.h,新版本是xx.hpp。所以我即使装了旧版本,也会报错。
错误:
fatal error: sophus/se3.hpp: 没有那个文件或目录
解决方法
下载sophus源码并编译:
git clone https://github.com/strasdat/Sophus.git
mkdir build
cd build
cmake ..
make
sudo make install
问题二
继续编译s-icp,又出现了新问题如下:
错误:
fatal error: fmt/core.h: 没有那个文件或目录
问题出在编译test_icp.cc文件的13行时,找不到fmt/core.h这个文件。
解决方法
在test_icp.cc文件的所在目录找到Cmakelists.txt,加入下面截图中的第三行(前两行本来就有,第三行新加):
即:
target_link_libraries([要生成的目标文件的名称] Sophus::Sophus)
后续编译中,在编译其他一些文件时出现同样问题,解决方法相同。(最后/semantic-icp/exec/Cmakelists.txt中的其他文件 基本都加上了上面截图的第三行。)
问题三
错误:
error: ‘struct ceres::Solver::Options’ has no member named ‘num_linear_solver_threads’; did you mean ‘linear_solver_type’?
查阅ceres源码会发现nun_linear_solver_threads变量已经不在Option 结构体里面了。查阅其它资料发现在ceres-1.15版本已经把num_linear_solver_threads丢弃了。
解决方法
直接找到报错文件的这一行注释掉。
结束
到此,s-icp编译成功。主要问题是时间过久(s-icp是2018年的),一些库的版本问题和函数舍弃导致的编译报错。