ceres-solver庫x64版本編譯說明
如果你需要使用ceres-solver庫中的
snavely_reprojection_error.h這個標頭檔案。
#include "ceres/ceres.h"
#include "..\ceres-solver\examples\snavely_reprojection_error.h"
請務必看一下這篇文章避免走彎路,筆者走了不少彎路,花了三天的時間才最終編譯成功,當然了學藝不精是重要原因,不過這是題外話了。
備註:寫這篇文章的時間是2018年5月4日14:52:15。
以下是注意事項。
1.按照官網的編譯順序編譯,但是官網的編譯順序存在一點小錯誤,官網說先編譯glog,然後是gflag,但是實際上glog依賴於glag,所以要先編譯gflag,然後是glog,不過這個問題不大,因為自然會發現這個問題。
2.必須使用最新版的ceres-solver庫,而不能使用穩定版的ceres-solver庫原始檔,當前穩定版的ceres-solver庫原始檔中並不包含snavely_reprojection_error.h這個標頭檔案。
3.一定要使用vs2015或者以上的編譯器,原因是最新程式碼利用了c++11的新特性,本人測試vs2010和vs2013均出現不同程度的難以解決的編譯問題。
4.會發現一個函式vsnprintf()重定義的錯誤,註釋掉這個函式的定義即可。
5.會發現一個過載函式呼叫不明確的問題,這裡通過更改函式名稱即可實現,注意不僅要更改宣告,還需要更改定義以及呼叫,可以使用vs的“查詢所有引用”的功能,然後根據最後一個引數決定選用那個名字。
6.更改最後一個錯誤如下
std::vector<int> vInt = { 0,1 };
EXPECT_THAT(x, UnorderedElementsAreArray(vInt));
以上第2點和第3點是重要事項,也是我走彎路的重要原因,這裡寫出來一方面是分享給其他人,更重要的是給自己做個留戀,話說這玩意兒真的是難編譯,官網的說明都提到了,在windows下編譯這個庫真的是非常複雜。
因為是筆記所以寫得不是很具體,如果遇到相同的問題希望能給予參考。
更多的交流,歡迎加入 暗號271888395