Ceres2.0.0報錯:variable or field ‘it’ declared void,ceres和eigen版本分別回退為1.14.0和2.2.9
阿新 • • 發佈:2021-01-29
問題描述
在新的電腦(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
解壓:
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