现在的位置: 首页 > 综合 > 正文

向android移植opencv的错误笔记

2013年09月13日 ⁄ 综合 ⁄ 共 1173字 ⁄ 字号 评论关闭

至于opencv的环境配置这里就不再啰嗦了,网上有很多这样的文章,也很好,请参考那些优秀的博客。

第一个问题:<vector>这个文件无法找到。我先试了试http://stackoverflow.com/questions/4893403/cant-include-c-headers-like-vector-in-android-ndk这上面说的方法,具体就是在application..mk中添加APP_STL := gnustl_static  ,但这种方法不奏效啊,依然报“ fatal error: vector: No
such file or directory”。我查了查android官方的例子有没有使用<vector>的例子,查了查还真有,我的路径是“D:\android\android-ndk-r8e\tests\device\test-gnustl-copy_vector_into_a_set”里面有一个使用<vector>的例子,我试着使用自己的cygwin编译,并且通过了,这说明我的cygwin没有问题。

我把这个例子的android.mk和application.mk抄写到我的工程里,还是出现 fatal error: vector: No such file or directory”,最后的差别就是扩展名android的官方例子是cpp,我的扩展名是c,我改过来了,然后编译成功了。

第二个问题:把c改成cpp后另一个问题出现了,”operand of '->' has non-pointer type 'JNIEnv {aka _JNIEnv}' “又报了这个错,原来cpp文件android的ndk它就默认这是个c++文件,使用c++接口,如果是c,ndk默认在编译时使用c接口因此造成这种问题。改正后的截图是:

这个问题的参考网址:http://bbs.csdn.net/topics/390355890

问题3:使用多个cpp文件编译。把一个大的功能分散到多个函数中,并且把每个函数写在一个cpp文件中,这符合c语言的模块化思想,也便于程序员看代码。可能语言表达不清楚,直接上图:这个jni文件夹中有两个cpp文件,一个是jni_part.cpp,一个是test.cpp.

如果在vs2010中编辑的话不需要做任何的改动,直接在test.hpp中声明以下,然后再在jni_part.cpp中包含这个test.hpp文件即可,但是无论在ndk,还是在gcc中,这种简单的做法是行不通的,在gcc中需要更改make文件,在ndk中则需要改动Android.mk文件。画三角的是只有jni_part.cpp时的mk文件,当加入test.cpp后需要添加对号所在的那行文字。并且这一行的位置也有要求,必须在include$()和最后的一个include$()之间。

抱歉!评论已关闭.