vs2015+64位win10系統ceres-solver編譯


記錄下自己編譯ceres-solver走過的彎路,同時希望對其他人能有所幫助。

編譯過程主要參考以下兩篇博文,但還是存在一些大坑,后面我會着重強調。

http://blog.csdn.net/streamchuanxi/article/details/52944652

http://blog.csdn.net/yizhou2010/article/details/52596280

 

1. 下載必備庫ceres-solver-1.11.0、eigen、gflags-2.0、glog-master

具體下載地址自行上網搜索,下載后解壓到文件夾ceres中。

在接下的編譯過程中,需要十分注意的是:千萬不要做平台的修改,必須在win32/x86下編譯,否則即使最后成功也無法使用!!!

 

2. 編譯glog

解壓后直接用vs2015打開google-glog.sln,版本問題直接遷移即可。

生成失敗主要解決以下兩個問題:

問題一:

錯誤 C2375 “snprintf”: 重定義

解決方法:注釋掉語句

//extern int GOOGLE_GLOG_DLL_DECL snprintf(char *str, size_t size,

// const char *format, ...);”

問題二:

錯誤 C2084 函數“int snprintf(char *const ,const std::size_t,const char *const ,...)”已有主體”

解決方法:

同樣注釋掉語句

“//int snprintf(char *str, size_t size, const char *format, ...) {

// va_list ap;
// va_start(ap, format);
// const int r = vsnprintf(str, size, format, ap);
// va_end(ap);
// return r;
//}”

 

3. 編譯gflags

同樣用vs2015打開gfalgs.sln(高版本貌似需要用cmake生成工程后再編譯)。

主要存在以下幾個問題:

問題一:

“錯誤 C2375 “snprintf”: 重定義;不同的鏈接 libgflags d:\ceres\gflags-2.0\src\windows\port.h 60”

錯誤 C2084 函數“int snprintf(char *const ,const std::size_t,const char *const ,...)”已有主體”

解決方法:同上,注釋掉語句

問題二:

錯誤 C3688 文本后綴“PRIu64”無效;未找到文文本運算符或文本運算符模板

解決方法:
將"%"PRId32改為“%d”

將"%"PRId64改為”%I64d“

將"%"PRIu64改為”%I64u“

 

4. 編譯ceres

采用cmake的方式(若不會使用可參照開頭給出的鏈接)

另:eigen庫直接解壓即可,不需要另外編譯

設置目錄如下:

EIGEN_INCLUDE_DIR為”D:\ceres\eigen“ 
GLOG_INCLUDE_DIR為”D:\ceres\glog-master\src\windows“
GLOG_LIBRARY為”D:\ceres\glog-master\Debug\libglog.lib“
GFLAGS_INCLUDE_DIR為"D:\ceres\gflags-2.0"
GFLAGS_LIBRARY為"D:\ceres\gflags-2.0\Debug\libgflags-debug.lib"

然后重點來了:

必須要將選項中的EIGENSPARSE勾上!!!

否則即使最后成功生成在很多情況下也是運行失敗的。

Configuring done and generating done.

最后,打開ceres.sln,生成ALL_BUILD,不出意外應該沒什么問題。

 

5. 整理並使用

所需的各種文件已經全部生成,下面進行適當的整理就可以使用了。

在ceres目錄下新建include和lib文件夾(便於項目添加)

將以下文件復制到include文件夾:

D:\ceres\ceres-solver-1.11.0\include\ceres

D:\ceres\ceres-solver-1.11.0\config\ceres\internal(復制到D:\ceres\include\ceres\internal文件夾中)

D:\ceres\glog-master\src\windows\glog

D:\ceres\gflags-2.0\src\windows\gflags

D:\ceres\eigen\Eigen

將以下文件復制到lib文件夾:

D:\ceres\glog-master\Debug\libglog.lib

D:\ceres\ceres-solver-1.11.0\mybuild\lib\Debug\ceres-debug.lib

D:\ceres\gflags-2.0\Debug\libgflags-debug.lib

D:\ceres\glog-master\Debug\libglog.dll(復制到C:\Windows\SysWOW64文件夾中)

 

好了,所有的工作都已經完成了,最后只要在需要用到ceres的項目中添加c++目錄和鏈接器即可。

 


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com