首先是装库,首先说明一下我此时的Eigen库版本是3.4.0,网上说会与这个版本相关,我的ceres库不是用的作者的。
1:安装ceres:
安装依赖项:
sudo apt-get install liblapack-dev libsuiteaprse-dev libcxsparse3 libgflags-dev libgoogle-glog-dev libgtest-dev
安装ceres 2.1.0(下载其他版本也可以类似于这样操作)
下载地址:Tags · ceres-solver/ceres-solver · GitHub
下载完成后解压:
tar -xzvf ceres-solver-2.1.0.tar.gz
解压完成后进行编译安装:
cd ceres-solver-2.1.0
mkdir build
cd build
cmake ..
make -j4
sudo make install
我在安装编译ceres的过程中出现了一个问题,我电脑之前安装了anaconda,在ceres编译的时候链接到anaconda的库里面去了,后面还是把anaconda给卸了。可能会有其他的办法,不过目前暂时不知。如果有人看见这篇记录了知道的也可以告诉我一下,谢谢啦
卸载anaconda环境参考博客:http://t.csdnimg.cn/fak2T
2:安装g2o
安装依赖项:
sudo apt-get install qt5-qmake qt5-default libqglviewer-dev-qt5 libsuitesparse-dev libcxsparse3 libcholmod3
安装g2o:
git clone https://github.com/RainerKuemmerle/g2o
cd g2o
mkdir build
cd build
cmake ..
make -j4
sudo make install
3:编译运行过程
3.1编译ceresCurveFitting
首先把CMakeLists.txt里面的C++11改成了C++17
在编译ceresCurveFitting的过程中出现了如下报错:
[ 66%] Linking CXX executable ceresCurveFitting
/usr/bin/ld: /usr/local/lib/libceres.a(thread_pool.cc.o): undefined reference to symbol 'pthread_create@@GLIBC_2.2.5'
/usr/bin/ld: /lib/x86_64-linux-gnu/libpthread.so.0: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
make[2]: *** [CMakeFiles/ceresCurveFitting.dir/build.make:117:ceresCurveFitting] 错误 1
make[1]: *** [CMakeFiles/Makefile2:113:CMakeFiles/ceresCurveFitting.dir/all] 错误 2
make: *** [Makefile:91:all] 错误 2
发现是pthread动态库没有找到,需要指定动态库才行的
在CMakeLists.txt添加一行:
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread")
编译成功
3.2编译g2oCurveFitting
在编译的过程中出现了make_unique的报错,这里根据报错的内容,把g2oCurveFitting.cpp文件里面make_unique前面的g2o改为std
最后全部编译成功,输出结果与作者相同。
这就是我遇到的全部问题。