因为做项目接触到因子图算法,然后就步入了GTSAM这个坑(满满都是泪啊)
由于系统环境不兼容,下载编译我就浪费了不少时间/(ㄒoㄒ)/~~,在入门的友友们建议直接去看官网的编译流程,因为每个人系统环境不同,别人教程里省略的步骤可能你的环境就需要配置,一遍一遍重新下载真的难受;
因为想要仿真所以还勾选了gtsam的matlab的toolboox(gtsam有早些版本有现成的toolbox可以下载,但是现在没有了,需要自己下载源码cmake的时候勾选);
以下是总结的gtsam资源:
-
在github上直接下载的别人编译好的gtsam3.0.2 matlab_toolbox,(我搬到了csdn上,跑过,win10下运行不成功显示key值不匹配,ubuntu20.04可以运行)
-
build好的gtsam4.0.2全部文件(可以重新build)
-
下载gtsam源文件(作者bitbucket,无需gihub)
-
gtsam源文件(gihub版本)
-
编译gtsam遇到问题的论坛(无需翻墙)
环境:-ubuntu20.04 -阿里源
- 编译步骤
cd gtsam/build
cmake -DMEX_COMMAND=matlab/bin/mex \
-DMATLAB_ROOT=matlab \
-DGTSAM_INSTALL_MATLAB_TOOLBOX=ON -DGTSAM_BUILD_WITH_MARCH_NATIVE=OFF ..
//若之后要运行LIO-SAM则cmake步骤要稍微调整,如下所示:
//cmake -DGTSAM_BUILD_WITH_MARCH_NATIVE=OFF …
make check //可选
sudo make install
Installing Matlab Toolbox to /usr/local/gtsam_toolbox
- 所遇到问题:
[ 27%] Linking CXX shared library libgtsam.so
/usr/bin/ld: /usr/local/lib/libboost_serialization.a(basic_iarchive.o): relocation R_X86_64_PC32 against symbol `_ZTVN5boost7archive6detail14basic_iarchiveE' can not be used when making a shared object; recompile with -fPIC
/usr/bin/ld: 最后的链结失败: bad value
collect2: error: ld returned 1 exit status
make[2]: *** [gtsam/CMakeFiles/gtsam.dir/build.make:1901:gtsam/libgtsam.so.4.0.0] 错误 1
make[1]: *** [CMakeFiles/Makefile2:3230:gtsam/CMakeFiles/gtsam.dir/all] 错误 2
make: *** [Makefile:163:all] 错误 2
[ 62%] Linking CXX shared library libgtsam.so
/usr/bin/ld: /usr/local/lib/libboost_serialization.a(basic_iarchive.o): relocation R_X86_64_PC32 against symbol `_ZTVN5boost7archive6detail14basic_iarchiveE' can not be used when making a shared object; recompile with -fPIC
/usr/bin/ld: 最后的链结失败: bad value
collect2: error: ld returned 1 exit status
make[2]: *** [gtsam/CMakeFiles/gtsam.dir/build.make:1901:gtsam/libgtsam.so.4.0.0] 错误 1
make[1]: *** [CMakeFiles/Makefile2:3230:gtsam/CMakeFiles/gtsam.dir/all] 错误 2
make: *** [Makefile:163:all] 错误 2
-
解决方案
第一种 (修改原始CMakeLists.txt文件)
add_compile_options(-fPIC)
第二种
set(CMAKE_C_FLAGS“$ {CMAKE_C_FLAGS} -fPIC”)
set(CMAKE_CXX_FLAGS“$ {CMAKE_CXX_FLAGS} -fPIC”) -
所遇到问题:卸载环境中多版本的boost
直接命令行安装的版本,也可以直接命令行卸载。
卸载boost:
sudo apt-get autoremove package
(注:package为要卸载的boost的名称 示例:sudo apt-get autoremove libboost1.55-dev)
查看boost安装版本:
dpkg -S /usr/include/boost/version.hpp
手动下载安装包安装的查找方式:
sudo find /usr -name “libboost”
如果是安装最新版本的boost,直接执行如下命令:
sudo apt-get install libboost-all-dev
如果安装比较新的版本,首先查一下哪些版本还能直接命令行安装:
aptitude search boost