PTAM的笔记(二)---ptam移植到android平台

来源:互联网 发布:linux qt 编辑:程序博客网 时间:2024/06/05 22:39

需要项目源码的---->项目工程完整文件

PTAM在windows linux平台的编译还可以去参照官方手册:http://www.robots.ox.ac.uk/~bob/software/ptamm/manual.pdf。PTAM官网只有C++源代码,因此移植到android考虑采用jni接口,github上有类似的工程android-ptam-master。本文主要讲下载了这个工程后的调试问题。

    首先,不建议android开发环境搭建在winows平台,本人,8G内存,i5中等处理器,在windows平台的eclipse上调试这个工程,每次编译2小时+。。。。后来只好搬到fedora上了。在windows平台上还有个问题:
1.windows的命令行只接收最大8191个字符,所以可能会报错,
    解决方法是:打开相应的android.mk文件,加上一句:  LOCAL_SHORT_COMMANDS := true,说明:设置这个变量为‘true’,当你的module有很多的源文件,或者依赖很多的静态或动态库。这会强制编译系统使用一个中间的列表文件,并通过@$(listfile) 语法和library archiver 或者 static linker一起使用。注意如果设置了‘true’以外的值,都会恢复成默认行为。你也可以在Android.mk文件中定义APP_SHORT_COMMANDS来强制使你的工程中的所有modules使用这项功能。
    注意:默认我们不推荐启用这个功能,因为它会使得编译变慢。APP_SHORT_COMMANDS , LOCAL_SHORT_COMMANDS 可以解决链接时参数太长的问题(生成*.a *.so时中间文件过多) 然而,编译,生成 libcrypto.so时,在libcrypto模块中采用LOCAL_SHORT_COMMANDS:=true来指定会导致编译错误。在Application.mk中指定 APP_SHORT_COMMANDS:=true可以顺利编译,链接。
2.出现f2c.h里链接到源文件报错,比如../INCLUDE/f2c.h,导致下面的integer等等变量都无法识别
     下载android-ptam后,在eclipse import之,然后设置项目属性,添加NDK路径,在C++-build里添加environment NDKROOT,以及在build command里添加正确的路径。出现这个问题的原因没搞清楚,解决方法是直接去INCLUDE里找到f2c.h的内容,然后复制到出错的f2c.h中来。或者删掉出错的f2c.h,把正确的f2c.h链接到此处。
3.出现在同一个namespace下debug_initialize无法识别。
    也是很奇葩的错误,有时莫名的自己好,实在不行,可以把debug_initialize的声明文件debug里面所有内容copy到出错的文件中,这样它在同一个文件中调用,就不会错了。
4.出现include <cmath.h> unresolved,造成下面swap函数无法识别。
    这个问题的原因也是不太清楚,我用的NDK版本是r10b,我把NDK版本换成r9d,然后重新设置环境,就好了。可能是版本问题,也可能只是因为我换了NDK重新加载了一次,刷新了,解决了错误。
5.编译通过(大概需要三/五分钟),运行PTAM APP 结果,有按钮界面,无相机预览。
    在captureView里面把关于render的两行注释取消掉。再到BatchRenderer里把onDrawFrame里的注释取消掉。保存运行。
6.mutiple target错误,import之后就出现
    这种错误应该是有target不匹配造成的,在属性 android里,project build target下的框里勾选合适的target。我用的是19. 
如果,你运行app直接秒退,检查是否编译了JNI库(在lib下),没有则是你ndk-build没有设置好。ndk-build 设置关键在于,要是build command里能找到正确的路径,我的是 ${NDKROOT}ndk-build ,                      NDKROOT=/home/cian/下载/android-ndk-r9d/。

    就这些了,望后来者好运。

    最后附上我的项目工程完整文件:http://download.csdn.net/detail/qq_21158525/9620430

1 0