[英]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.