1. 程式人生 > 其它 >Ceres2.0.0報錯:variable or field ‘it’ declared void,ceres和eigen版本分別回退為1.14.0和2.2.9

Ceres2.0.0報錯:variable or field ‘it’ declared void,ceres和eigen版本分別回退為1.14.0和2.2.9

問題描述

在新的電腦(ubuntu16.04)上,上官網http://www.ceres-solver.org/installation.html安裝了ceres,跑之前自己的程式碼時,發現類似下面的錯誤,一大堆,記憶體也會爆炸:

/usr/local/include/ceres/internal/parameter_dims.h:85:11: error: ‘integer_sequence’ is not a member of ‘std’

分析

我的包用了ceres,根據錯誤認為ceres有問題,發現現在ceres的版本是2.0.0而之前的是1.幾的,所以想回退。

下載ceres 1.14的壓縮檔案,按照流程進行編譯報錯:

/home/seivl/Download/ceres-solver-1.14.0/internal/ceres/gtest/gtest.h:10445:35: error: variable or field ‘it’ declared void
   for (typename C::const_iterator it = container.begin();
                                   ^
internal/ceres/CMakeFiles/residual_block_test.dir/build.make:81: recipe for target 'internal/ceres/CMakeFiles/residual_block_test.dir/residual_block_test.cc.o' failed

估計是eigen的版本也要回退(ceres2.0.0需要3.3以後版本,我之前電腦是3.2.9)所以我得恢復到這樣的狀態:
eigen3.2.9—ceres1.14–my pakage

步驟

Eigen

先把eigen解除安裝,把/usr/include和/usr/local/include下面的Eigen和eigen3資料夾都刪除:

sudo rm -rf /usr/include/Eigen /usr/include/eigen3  /usr/local/include/Eigen  /usr/local/include/eigen3  

參考文章:https://blog.csdn.net/yuan0061/article/details/83002229

從http://eigen.tuxfamily.org/index.php?title=Main_Page下載對應版本的eigen壓縮包,直接解壓到對應位置就可以了
解壓:

 sudo tar -xzvf eigen-3.2.9.tar.gz -C /usr/local/include

重新命名:

sudo mv /usr/local/include/eigen-3.2.9 /usr/local/include/eigen3

複製:

sudo cp -r /usr/local/include/eigen3/Eigen /usr/local/include 
sudo cp -r /usr/local/include/eigen3/Eigen /usr/include 
sudo cp -r /usr/local/include/eigen3 /usr/include

為了程式能找的到,usr/include和/usr/local/include下面的Eigen和eigen3都要放好

ceres

解除安裝原有ceres:

sudo rm -r /usr/local/lib/cmake/Ceres
sudo rm -rf /usr/local/include/ceres /usr/local/lib/libceres.a

然後再開始編譯ceres1.14.0:

tar zxf ceres-solver-1.14.0.tar.gz
mkdir ceres-bin
cd ceres-bin
cmake ../ceres-solver-1.14.0
make -j3
make test
make install

參考文章:

Eigen庫安裝(兩種方式)
https://blog.csdn.net/yuan0061/article/details/83002229
ubuntu解除安裝ceres
https://blog.csdn.net/weixin_45617478/article/details/104125635