编译PTAM的碎碎念

来源:互联网 发布:有线键鼠套装推荐 知乎 编辑:程序博客网 时间:2024/06/06 21:42
之所以说是碎碎念,是因为直到最后编译运行成功都相当得。。。不值一提。。。
(但尼玛也浪费掉俺整整一天的时间_(:зゝ∠)_

作业用BGM:悲しみのテーマ?La mia tristezzaメドレー(sm9502194)

首先关于PTAM,就是Parallel Tracking and Mapping for Small AR Workspaces这篇中的算法,详略,说一下在Win7+VS2010上的实现方法

首先是官方给出的手册:http://www.robots.ox.ac.uk/~bob/software/ptamm/manual.pdf 在第23页以后给出了Window上搞PTAM和PTAMM的详细过程。。。

说详细似乎又不是那么详细。。。因为遇到任何头大的问题在上面几乎是查不到解决方法的,但是!但是当你自力更生地把问题解决了,会发现——绝对还是应该严格跟着他的步骤来的

最典型的就是那些需要用的依赖,老老实实去下他给的版本可以省很多事。。。尤其是libcvd,我其实有半天以上的时间都在战他,试了三种版本,三个版本的VS,明明步骤和配置都一样但他就能给你报不同的错?!

引用手册中的话,Window会让你想哭的(。。。

不过我们可以偷个懒,这里有个配置得差不多的PTAM工程:https://github.com/870416/PTAM-Windows ,要用的头文件,库和他们的原始文件都附在里面了。

需要做的事:
1.把上面链接中的文件打包下来,点开PTAM.sln
2.显然目前还不能直接用,需要把include和lib里需要的文件放好:在PTAM.sln同级创建以上两个文件夹
include中要放
编译PTAM的碎碎念
除了GL外基本都包含在刚才down下来的包里了(http://glew.sourceforge.net/,可以直接下载已经编译好的glew,使用版本:glew-1.9.0-win32)
cvd->libcvd-20120202下同名文件夹,直接拷贝过来,里面还需要个config.h文件,在build->2005下面,拽过来放进去
gvars3->gvars-3.0下同名文件夹,拷贝过来
TooN->TooN-2.0下同名文件夹,拷贝过来
1394Camera系列->对应文件夹下找到同名头文件,拷贝过来
d3d系列->directshow\Include下文件全部拷贝过来
jpeg系列->jpeglib\include下文件全部拷贝过来
png系列->需要下载libpng(http://www.libpng.org/pub/png/libpng.html)
pthread系列-->pthread\include下文件全部拷贝过来
qedit.h-->qedit下同名头文件,拷贝过来
zlib系列->需要下载(http://www.zlib.net/)

lib中要放(Debug版)
编译PTAM的碎碎念
和上面的头文件类似,从对应文件夹下lib里拷贝过来即可
其中blas和lapack在lapack-MT-debug文件夹下,也拷过来
需要注意的是这个包里提供的lib都是的debug版,这也就铺垫了之后的release噩梦(喂

3.回PTAM工程,选Win32+Debug,右键工程属性,添加上述Include和lib路径,然后要把C/C++下Code Generation下的Runtime Library改成MTd
编译PTAM的碎碎念
(注意,一定要保证这个选项和编译所依赖的库时是一致的,这里Debug选MTd,Release选MT)
另外Linker下的Additional Dependencie下的库名blas_win32d.lib和lapack_win32d.lib也要对应修改成我们实际用的blas_win32_MTd.lib和lapack_win32_MTd.lib

总之这些细枝末节的事情都耽误事得很,请一定保持冷静,不冷静的事还在后面

如果上面这些都配置无误的话,应该是能正常编译运行的。。。Debug版。。。但是。。。炒鸡慢
所以我们得弄下Release版,但所需的lib文件。。。得自己准备= =。。。(不过blas和lapack可以直接用lapack-MT-release文件夹下的)

主要是gvars3和要人命的libcvd,其他在网上都能适当(……)地找到
gvars3可以直接到对应文件夹下build/VC2008下打开sln文件,设置基本同上(就是include和lib路径),根据手册上的说法,不用FLTK的话可以把GUI_Fltk2.h和GUI_Fltk2.ccRemove掉
选Release直接编译,在根目录的lib下会生成所需的lib文件(和原本放debug版的在一个文件夹下)

然后是烦人的libcvd
设置还是同上,但因为要支持PNG所以需要在Source Files/pnm-src下包含png.cc,然后它依赖于libpng,如果报任何和这个文件有关的错大凡都是libpng的版本不当造成的,去网上再下个别的版本试试
嗯,试试,我也只能说试试了

顺便一提我用的版本是手册上说的libcvd-20100511,上面那个包里的是libcvd-20120202……总之遇到了些time.h的问题我好像在哪里见过但暂时懒得想了,pass(要不要这么不负责

设置好不报错的话,老老实实地叫VS2010编译即可,但Release版它。。。非常,非常得慢,慢到我以为电脑假死了(但事实证明它只是慢而已,我最后扔下它去睡觉了,结果第二天早上看还是成功生成lib文件了。。。当然可能也不用这么长时间……)

结果不作不死我又尝试用VS2008和2012编译,然后得到了一下网上常见的问题
VS2008:
不识别array,去下SP1(http://www.microsoft.com/en-us/download/confirmation.aspx?id=3138)和Feature Pack(http://www.microsoft.com/en-gb/download/details.aspx?id=6922)安上即可。。。没啥必要,因为你之后会发现2008编译出来的lib在2010的工程下还是不能使

另外一个常见的错是cannot update program database '..\vc90.pdb,话说把同样的工程扔2010下会直接告诉你找不到某某lib……所以把lib的路径修正好应该就没问题了

这么说感觉没什么但当时真得头大得很,但在网上搜来搜去都没有让人满意的答复……
最糟的是,生成的东西还不能用(扶额

再来是2012,反应和2010差不多,Release版也挺慢但还在人的接受范围不知道是不是电脑的问题(俺家小电上没2012所以用得是学校机房的电脑)
不过和2008一样生成的lib拿到2010的工程下不能用(会说某个值是‘1700’和obj文件里的‘1600’不符合云云)

所以你看我瞎折腾半天,干脆去睡觉了,结果2010自力更生地跑出来了,而且直接能用。。。

人生怎一个无望了得

……可见这篇也没怎么要好写的意思,刚通宵完,有话以后再谈
以上
0 0
原创粉丝点击