繁体   English   中英

在本机代码中使用opencv进行Android应用开发

[英]Using opencv in native code for Android app development

我在Android应用中使用本地代码的ndk-build namespace错误。 错误样本是

C:/adt-bundle-windows-x86/ndk/sources/cxx-stl/gnu-libstdc++/4.6/include/bits
/allocator.h:54:1: error: unknown type name 'namespace'
C:/adt-bundle-windows-x86/ndk/sources/cxx-stl/gnu-libstdc++/4.6/include/bits
/allocator.h:55:1: error: expected ',' or ';' before '{' token

对于OpenCV设置,我的Application.mk文件是

APP_STL := gnustl_static
APP_CPPFLAGS := -frtti -fexceptions
APP_ABI := armeabi
APP_PLATFORM := android-10 

这意味着我在编译本机代码时使用gnu-libstdc++

我的jni.c具有c extension 那是我从第三方那里收到的,他们喜欢.c extension ,就好像他们必须更改为.cpp extension ,他们必须在其他库中进行很多更改。

到目前为止还可以,我为本地开发完成了OpenCV的所有项目设置,如果我执行ndk-build ,则可以制作.so库。

当我将OpenCV's头文件#include <opencv2/contrib/detection_based_tracker.hpp>到jni.c中时,发生了那些namespace error的问题,并且出现了很多命名空间错误。 如果我将#include <opencv2/contrib/detection_based_tracker.hpp>cpp文件中,则没有错误。 我的问题是

(1)错误是因为在.c文件中使用了.hpp文件吗?

(2)如果我别无选择,必须使用该.c文件,是否有办法消除该错误? 谢谢

我的假设是由于扩展名“ .c”,该文件被编译为“ C”文件而不是“ C ++”文件。 这意味着您不能在jni.c,wike类或名称空间中使用任何“ C ++”代码。 显然,这些已在您使用的文件“ detection_based_tracker.hpp”中使用。

因此,问题不在于您包括一个名为“ .hpp”的文件,而是该文件包含了“ C ++”编译器无法处理的“ C ++”代码。

解决此问题的一种方法是仅在opencv中使用“ C”函数(例如,“ opencv2 / imgproc / imgproc_c.h”而不是“ opencv2 / imgproc / imgproc.hpp”)。 但是,据我所知,您的函数“ detection_based_tracker.hpp”可能没有“ C”版本。

另一个选择是添加第二个文件“ function.cpp”以及使用opencv的“ C ++”函数。 可以在文件“ functions.h”中声明“ function.cpp”中的函数,并将其包含在“ jni.c”中,因此您仍然可以使用opencv c ++函数。 但是请注意,在“ function.h”文件中仅使用C样式函数(没有类,名称空间等),否则,您将遇到与以前相同的问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM