NDK编译opencv错误 [英] NDK build opencv error
问题描述
我在使用NDK方式编译源代码时遇到错误,我将opencv源代码复制到jni目录中,准备了Android.mk和Application.mk以及源文件. Mk文件,编译后出现以下错误,也请给点意见,谢谢! ! !
I encountered an error using the NDK way to compile the source code, I will opencv source code copied to the jni directory, prepared Android.mk and Application.mk as well as the source file. Mk file, compiled the following error, please also Give some advice, thanks! ! !
操作系统:Ubuntu 17210 64bit opencv版本:3.3 android-ndk版本:14b
Operating System: Ubuntu 17210 64bit opencv version: 3.3 android-ndk version: 14b
log:
[armeabi-v7a] Gdbserver : [arm-linux-androideabi] libs/armeabi-v7a/gdbserver
[armeabi-v7a] Gdbsetup : libs/armeabi-v7a/gdb.setup
[armeabi-v7a] Compile++ thumb: opencv <= perf_io_base64.cpp
[armeabi-v7a] Compile++ thumb: opencv <= perf_addWeighted.cpp
[armeabi-v7a] Compile++ thumb: opencv <= perf_convertTo.cpp
[armeabi-v7a] Compile++ thumb: opencv <= perf_math.cpp
[armeabi-v7a] Compile++ thumb: opencv <= perf_split.cpp
[armeabi-v7a] Compile++ thumb: opencv <= perf_inRange.cpp
[armeabi-v7a] Compile++ thumb: opencv <= perf_umat.cpp
[armeabi-v7a] Compile++ thumb: opencv <= perf_stat.cpp
[armeabi-v7a] Compile++ thumb: opencv <= perf_dft.cpp
[armeabi-v7a] Compile++ thumb: opencv <= perf_abs.cpp
[armeabi-v7a] Compile++ thumb: opencv <= perf_bitwise.cpp
[armeabi-v7a] Compile++ thumb: opencv <= perf_cvround.cpp
[armeabi-v7a] Compile++ thumb: opencv <= perf_compare.cpp
[armeabi-v7a] Compile++ thumb: opencv <= perf_merge.cpp
[armeabi-v7a] Compile++ thumb: opencv <= perf_mat.cpp
[armeabi-v7a] Compile++ thumb: opencv <= perf_sort.cpp
[armeabi-v7a] Compile++ thumb: opencv <= perf_main.cpp
[armeabi-v7a] Compile++ thumb: opencv <= perf_norm.cpp
[armeabi-v7a] Compile++ thumb: opencv <= perf_lut.cpp
[armeabi-v7a] Compile++ thumb: opencv <= perf_reduce.cpp
[armeabi-v7a] Compile++ thumb: opencv <= perf_dot.cpp
[armeabi-v7a] Compile++ thumb: opencv <= perf_gpumat.cpp
[armeabi-v7a] Compile++ thumb: opencv <= perf_arithm.cpp
[armeabi-v7a] Compile++ thumb: opencv <= perf_minmaxloc.cpp
[armeabi-v7a] Compile++ thumb: opencv <= perf_usage_flags.cpp
[armeabi-v7a] Compile++ thumb: opencv <= perf_bufferpool.cpp
[armeabi-v7a] Compile++ thumb: opencv <= perf_matop.cpp
[armeabi-v7a] Compile++ thumb: opencv <= perf_gemm.cpp
[armeabi-v7a] Compile++ thumb: opencv <= perf_arithm.cpp
[armeabi-v7a] Compile++ thumb: opencv <= perf_dxt.cpp
[armeabi-v7a] Compile++ thumb: opencv <= perf_channels.cpp
[armeabi-v7a] Compile++ thumb: opencv <= cuda_host_mem.cpp
In file included from /home/jiangc/opencv3.3Ndk库/hello-jni/jni/core/src/cuda_host_mem.cpp:44:
In file included from /home/jiangc/opencv3.3Ndk库/hello-jni/jni/core/src/precomp.hpp:49:
In file included from /home/jiangc/opencv3.3Ndk库/hello-jni/jni/include/opencv2/core/utility.hpp:56:
In file included from /home/jiangc/opencv3.3Ndk库/hello-jni/jni/include/opencv2/core.hpp:52:
In file included from /home/jiangc/opencv3.3Ndk库/hello-jni/jni/include/opencv2/core/cvdef.h:189:
In file included from /home/jiangc/opencv3.3Ndk库/hello-jni/jni/include/opencv2/core/cv_cpu_dispatch.h:32:
In file included from /home/jiangc/android-ndk-r14b/toolchains/llvm/prebuilt/linux-x86_64/bin/../lib64/clang/3.8.275480/include/emmintrin.h:27:
In file included from /home/jiangc/android-ndk-r14b/toolchains/llvm/prebuilt/linux-x86_64/bin/../lib64/clang/3.8.275480/include/xmmintrin.h:27:
/home/jiangc/android-ndk-r14b/toolchains/llvm/prebuilt/linux-x86_64/bin/../lib64/clang/3.8.275480/include/mmintrin.h:47:5: error:
use of undeclared identifier '__builtin_ia32_emms'; did you mean '__builtin_isless'?
__builtin_ia32_emms();
^
/home/jiangc/android-ndk-r14b/toolchains/llvm/prebuilt/linux-x86_64/bin/../lib64/clang/3.8.275480/include/mmintrin.h:47:5: note:
'__builtin_isless' declared here
/home/jiangc/android-ndk-r14b/toolchains/llvm/prebuilt/linux-x86_64/bin/../lib64/clang/3.8.275480/include/mmintrin.h:47:25: error:
too few arguments to function call, expected 2, have 0
__builtin_ia32_emms();
^
/home/jiangc/android-ndk-r14b/toolchains/llvm/prebuilt/linux-x86_64/bin/../lib64/clang/3.8.275480/include/mmintrin.h:64:19: error:
use of undeclared identifier '__builtin_ia32_vec_init_v2si'
return (__m64)__builtin_ia32_vec_init_v2si(__i, 0);
^
/home/jiangc/android-ndk-r14b/toolchains/llvm/prebuilt/linux-x86_64/bin/../lib64/clang/3.8.275480/include/mmintrin.h:81:12: error:
use of undeclared identifier '__builtin_ia32_vec_ext_v2si'
return __builtin_ia32_vec_ext_v2si((__v2si)__m, 0);
^
/home/jiangc/android-ndk-r14b/toolchains/llvm/prebuilt/linux-x86_64/bin/../lib64/clang/3.8.275480/include/mmintrin.h:143:19: error:
use of undeclared identifier '__builtin_ia32_packsswb'
return (__m64)__builtin_ia32_packsswb((__v4hi)__m1, (__v4hi)__m2);
^
/home/jiangc/android-ndk-r14b/toolchains/llvm/prebuilt/linux-x86_64/bin/../lib64/clang/3.8.275480/include/mmintrin.h:173:19: error:
use of undeclared identifier '__builtin_ia32_packssdw'
return (__m64)__builtin_ia32_packssdw((__v2si)__m1, (__v2si)__m2);
^
/home/jiangc/android-ndk-r14b/toolchains/llvm/prebuilt/linux-x86_64/bin/../lib64/clang/3.8.275480/include/mmintrin.h:203:19: error:
use of undeclared identifier '__builtin_ia32_packuswb'
return (__m64)__builtin_ia32_packuswb((__v4hi)__m1, (__v4hi)__m2);
^
/home/jiangc/android-ndk-r14b/toolchains/llvm/prebuilt/linux-x86_64/bin/../lib64/clang/3.8.275480/include/mmintrin.h:230:19: error:
use of undeclared identifier '__builtin_ia32_punpckhbw'
return (__m64)__builtin_ia32_punpckhbw((__v8qi)__m1, (__v8qi)__m2);
^
/home/jiangc/android-ndk-r14b/toolchains/llvm/prebuilt/linux-x86_64/bin/../lib64/clang/3.8.275480/include/mmintrin.h:253:19: error:
use of undeclared identifier '__builtin_ia32_punpckhwd'
return (__m64)__builtin_ia32_punpckhwd((__v4hi)__m1, (__v4hi)__m2);
^
/home/jiangc/android-ndk-r14b/toolchains/llvm/prebuilt/linux-x86_64/bin/../lib64/clang/3.8.275480/include/mmintrin.h:274:19: error:
use of undeclared identifier '__builtin_ia32_punpckhdq'
return (__m64)__builtin_ia32_punpckhdq((__v2si)__m1, (__v2si)__m2);
^
/home/jiangc/android-ndk-r14b/toolchains/llvm/prebuilt/linux-x86_64/bin/../lib64/clang/3.8.275480/include/mmintrin.h:301:19: error:
use of undeclared identifier '__builtin_ia32_punpcklbw'
return (__m64)__builtin_ia32_punpcklbw((__v8qi)__m1, (__v8qi)__m2);
^
/home/jiangc/android-ndk-r14b/toolchains/llvm/prebuilt/linux-x86_64/bin/../lib64/clang/3.8.275480/include/mmintrin.h:324:19: error:
use of undeclared identifier '__builtin_ia32_punpcklwd'
return (__m64)__builtin_ia32_punpcklwd((__v4hi)__m1, (__v4hi)__m2);
^
/home/jiangc/android-ndk-r14b/toolchains/llvm/prebuilt/linux-x86_64/bin/../lib64/clang/3.8.275480/include/mmintrin.h:345:19: error:
use of undeclared identifier '__builtin_ia32_punpckldq'
return (__m64)__builtin_ia32_punpckldq((__v2si)__m1, (__v2si)__m2);
^
/home/jiangc/android-ndk-r14b/toolchains/llvm/prebuilt/linux-x86_64/bin/../lib64/clang/3.8.275480/include/mmintrin.h:366:19: error:
use of undeclared identifier '__builtin_ia32_paddb'; did you mean '__builtin_arm_qadd'?
return (__m64)__builtin_ia32_paddb((__v8qi)__m1, (__v8qi)__m2);
^
/home/jiangc/android-ndk-r14b/toolchains/llvm/prebuilt/linux-x86_64/bin/../lib64/clang/3.8.275480/include/mmintrin.h:366:19: note:
'__builtin_arm_qadd' declared here
/home/jiangc/android-ndk-r14b/toolchains/llvm/prebuilt/linux-x86_64/bin/../lib64/clang/3.8.275480/include/mmintrin.h:366:40: error:
cannot initialize a parameter of type 'int' with an rvalue of type '__v8qi'
(vector of 8 'char' values)
return (__m64)__builtin_ia32_paddb((__v8qi)__m1, (__v8qi)__m2);
^~~~~~~~~~~~
/home/jiangc/android-ndk-r14b/toolchains/llvm/prebuilt/linux-x86_64/bin/../lib64/clang/3.8.275480/include/mmintrin.h:387:19: error:
use of undeclared identifier '__builtin_ia32_paddw'; did you mean '__builtin_arm_qadd'?
return (__m64)__builtin_ia32_paddw((__v4hi)__m1, (__v4hi)__m2);
^
/home/jiangc/android-ndk-r14b/toolchains/llvm/prebuilt/linux-x86_64/bin/../lib64/clang/3.8.275480/include/mmintrin.h:366:19: note:
'__builtin_arm_qadd' declared here
return (__m64)__builtin_ia32_paddb((__v8qi)__m1, (__v8qi)__m2);
^
/home/jiangc/android-ndk-r14b/toolchains/llvm/prebuilt/linux-x86_64/bin/../lib64/clang/3.8.275480/include/mmintrin.h:387:40: error:
cannot initialize a parameter of type 'int' with an rvalue of type '__v4hi'
(vector of 4 'short' values)
return (__m64)__builtin_ia32_paddw((__v4hi)__m1, (__v4hi)__m2);
^~~~~~~~~~~~
/home/jiangc/android-ndk-r14b/toolchains/llvm/prebuilt/linux-x86_64/bin/../lib64/clang/3.8.275480/include/mmintrin.h:408:19: error:
use of undeclared identifier '__builtin_ia32_paddd'; did you mean '__builtin_arm_qadd'?
return (__m64)__builtin_ia32_paddd((__v2si)__m1, (__v2si)__m2);
^
/home/jiangc/android-ndk-r14b/toolchains/llvm/prebuilt/linux-x86_64/bin/../lib64/clang/3.8.275480/include/mmintrin.h:366:19: note:
'__builtin_arm_qadd' declared here
return (__m64)__builtin_ia32_paddb((__v8qi)__m1, (__v8qi)__m2);
^
/home/jiangc/android-ndk-r14b/toolchains/llvm/prebuilt/linux-x86_64/bin/../lib64/clang/3.8.275480/include/mmintrin.h:408:40: error:
cannot initialize a parameter of type 'int' with an rvalue of type '__v2si'
(vector of 2 'int' values)
return (__m64)__builtin_ia32_paddd((__v2si)__m1, (__v2si)__m2);
^~~~~~~~~~~~
fatal error: too many errors emitted, stopping now [-ferror-limit=]
20 errors generated.
make: *** [/home/jiangc/opencv3.3Ndk库/hello-jni/obj/local/armeabi-v7a/objs/opencv/core/src/cuda_host_mem.o] Error 1
Android.mk file
--------------------------------------------------------------------------------
LOCAL_PATH :=$(call my-dir)
ZLIB_PATH:=/home/jiangc/android-ndk-r14b/platforms/android-19/arch-arm/usr
include $(CLEAR_VARS)
LOCAL_MODULE := opencv
#源文件 mk 文件
include $(LOCAL_PATH)/core_source.mk
include $(LOCAL_PATH)/dnn_source.mk
include $(LOCAL_PATH)/features2d_source.mk
include $(LOCAL_PATH)/highgui_source.mk
include $(LOCAL_PATH)/imgcodecs_source.mk
include $(LOCAL_PATH)/imgproc_source.mk
include $(LOCAL_PATH)/ml_source.mk
include $(LOCAL_PATH)/objdetect_source.mk
include $(LOCAL_PATH)/photo_source.mk
include $(LOCAL_PATH)/stitching_source.mk
include $(LOCAL_PATH)/videoio_source.mk
include $(LOCAL_PATH)/video_source.mk
include $(LOCAL_PATH)/viz_source.mk
include $(LOCAL_PATH)/calib3d_source.mk
include $(LOCAL_PATH)/ts_source.mk
#include $(LOCAL_PATH)/cuda_source.mk
#包含源文件变量
LOCAL_SRC_FILES := $(CORE_SOURCE) \
$(DNN_SOURCE) \
$(FEATURES2D_SOURCE) \
$(HIGHGUI_SOURCE) \
$(IMGCODECS_SOURCE) \
$(IMAGEPROC_SOURCE) \
$(ML_SOURCE) \
$(OBJDETECT_SOURCE) \
$(PHOTO_SOURCE) \
$(STITCHING_SOURCE) \
$(VIDEOIO_SOURCE) \
$(VIDEO_SOURCE) \
$(VIZ_SOURCE) \
$(TS_SOURCE)\
$(CALIB3D_SOURCE)
#$(CUDAWARPING_SOURCE) \
#$(CUDASTEREO_SOURCE) \
#$(CUDAIMGPROC_SOURCE) \
#$(CUDAOBJDETECT_SOURCE) \
#$(CUDAFEATURES2D_SOURCE) \
#$(CUDALEGACY_SOURCE) \
#$(CUDALEGACY_SOURCE) \
#$(CUDAARITHM_SOURCE) \
#$(CUDAOPTFLOW_SOURCE) \
#$(CUDACODEC_SOURCE) \
#定义include文件位置
LOCAL_C_INCLUDES := $(LOCAL_PATH)/include/ \
$(ZLIB_PATH)/include
LOCAL_CPPFLAGS := -frtti -fexceptions
LOCAL_LDLIBS += -llog -lz
LOCAL_LDLIBS+= -L$(SYSROOT)/usr/lib
include $(BUILD_SHARED_LIBRARY)
Application.mk文件
APP_OPTIM := release
APP_PLATFORM := android-19
APP_STL := gnustl_static
APP_CPPFLAGS += -frtti
APP_CPPFLAGS += -fexceptions
APP_CPPFLAGS += -DANDROID
APP_ABI := armeabi-v7a
One of the mk source files
--------------------------------------------------------------------------------
CORE_SOURCE = core/perf/perf_io_base64.cpp\
core/perf/perf_addWeighted.cpp\
core/perf/perf_convertTo.cpp\
core/perf/perf_math.cpp\
core/perf/perf_split.cpp \
core/perf/perf_inRange.cpp \
core/perf/perf_umat.cpp \
core/perf/perf_stat.cpp \
core/perf/perf_dft.cpp \
core/perf/perf_abs.cpp \
core/perf/perf_bitwise.cpp \
core/perf/perf_cvround.cpp \
core/perf/perf_compare.cpp \
core/perf/perf_merge.cpp \
core/perf/perf_mat.cpp \
core/perf/perf_sort.cpp \
core/perf/perf_main.cpp \
core/perf/perf_norm.cpp \
core/perf/perf_lut.cpp \
core/perf/perf_reduce.cpp \
core/perf/perf_dot.cpp \
core/perf/cuda/perf_gpumat.cpp \
core/perf/perf_arithm.cpp \
core/perf/perf_minmaxloc.cpp \
core/perf/opencl/perf_usage_flags.cpp \
core/perf/opencl/perf_bufferpool.cpp \
core/perf/opencl/perf_matop.cpp \
core/perf/opencl/perf_gemm.cpp \
core/perf/opencl/perf_arithm.cpp \
core/perf/opencl/perf_dxt.cpp \
core/perf/opencl/perf_channels.cpp \
core/src/cuda_host_mem.cpp \
core/src/rand.cpp \
core/src/lapack.cpp \
core/src/parallel.cpp \
core/src/lpsolver.cpp \
core/src/stat.dispatch.cpp \
core/src/matrix_decomp.cpp \
core/src/trace.cpp \
core/src/stat.cpp \
core/src/cuda_stream.cpp \
core/src/hal_internal.cpp \
core/src/convert.avx2.cpp \
core/src/convert.fp16.cpp \
core/src/opengl.cpp \
core/src/stl.cpp \
core/src/copy.cpp \
core/src/parallel_pthreads.cpp \
core/src/alloc.cpp \
core/src/directx.cpp \
core/src/arithm.cpp \
core/src/lda.cpp \
core/src/va_intel.cpp \
core/src/split.cpp \
core/src/convert.sse4_1.cpp \
core/src/gl_core_3_1.cpp \
core/src/tables.cpp \
core/src/out.cpp \
core/src/cuda_info.cpp \
core/src/mathfuncs.cpp \
core/src/system.cpp \
core/src/merge.cpp \
core/src/mathfuncs_core.dispatch.cpp \
core/src/matrix.cpp \
core/src/command_line_parser.cpp \
core/src/conjugate_gradient.cpp \
core/src/softfloat.cpp \
core/src/cuda_gpu_mat.cpp \
core/src/persistence.cpp \
core/src/ovx.cpp \
core/src/array.cpp \
core/src/dxt.cpp \
core/src/glob.cpp \
core/src/pca.cpp \
core/src/kmeans.cpp \
core/src/types.cpp \
core/src/matmul.cpp \
core/src/ocl.cpp \
core/src/opencl/runtime/opencl_clamdfft.cpp \
core/src/opencl/runtime/opencl_clamdblas.cpp \
core/src/opencl/runtime/opencl_core.cpp \
core/src/matop.cpp \
core/src/convert.cpp \
core/src/algorithm.cpp \
core/src/downhill_simplex.cpp \
core/src/umatrix.cpp \
core/src/datastructs.cpp \
core/test/test_misc.cpp \
core/test/test_umat.cpp \
core/test/test_eigen.cpp \
core/test/test_ippasync.cpp \
core/test/test_countnonzero.cpp \
core/test/test_utils.cpp \
core/test/test_rotatedrect.cpp \
core/test/test_operations.cpp \
core/test/test_math.cpp \
core/test/test_io.cpp\
core/test/test_ptr.cpp\
core/test/test_hal_core.cpp\
core/test/test_mat.cpp\
core/test/test_main.cpp\
core/test/test_dxt.cpp\
core/test/test_concatenation.cpp\
core/test/ocl/test_matrix_expr.cpp \
core/test/ocl/test_gemm.cpp \
core/test/ocl/test_dft.cpp \
core/test/ocl/test_channels.cpp \
core/test/ocl/test_image2d.cpp \
core/test/ocl/test_matrix_operation.cpp \
core/test/ocl/test_arithm.cpp \
core/test/test_intrin.cpp \
core/test/test_downhill_simplex.cpp \
core/test/test_rand.cpp \
core/test/test_conjugate_gradient.cpp \
core/test/test_arithm.cpp \
core/test/test_ds.cpp \
core/test/test_lpsolver.cpp \
core/CMakeFiles/3.9.1/CompilerIdCXX/CMakeCXXCompilerId.cpp \
core/misc/java/src/cpp/core_manual.cpp
推荐答案
这些是x86特定的内在函数.我真的怀疑CUDA支持是否可以为Android构建.可能只是从CORE_SOURCE
中删除该文件.
Those are x86 specific intrinsics. I really doubt that the CUDA support is able to be built for Android. Probably just remove that file from CORE_SOURCE
.
这篇关于NDK编译opencv错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!