Opencv 4.1.1 Android链接错误

时间:2019-08-09 22:29:31

标签: android opencv cmake

我有一个使用OpenCV用c ++编写的应用程序,该应用程序用于和Android SDK。当前,我们正在使用OpenCV 3.2.0,但我们需要迁移到OpenCV 4.1.1。我试图用更少的模块来构建用于不同体系结构的模块。

我正在使用Opencv 4.1.1; ndk 16b; cmake 3.13.2

这是命令行

cmake \ -DANDROID_ABI:STRING=$currentArch \ -DANDROID_TOOLCHAIN_NAME:STRING=$currentArchVersion \ -D ANDROID_NDK:PATH="/Users/analivia/Library/Android/sdk/ndk-bundle" \ -D ANDROID_NDK_HOST_X64:BOOL="1" \ -D ANDROID_NATIVE_API_LEVEL=24 \ -D ANDROID_TOOLCHAIN=clang \ -D ANDROID_STL=c++_static \ -D CMAKE_TOOLCHAIN_FILE:FILEPATH="/Users/analivia/Library/Android/sdk/ndk-bundle/build/cmake/android.toolchain.cmake" \ -D CMAKE_CXX_FLAGS_MINSIZEREL:STRING="-Os -ffunction-sections -fdata-sections -Wl,--gc-sections -D NDEBUG" \ -D CMAKE_CXX_FLAGS_RELEASE:STRING="-Os -ffunction-sections -fdata-sections -Wl,--gc-sections -D NDEBUG" \ -D CMAKE_CXX_FLAGS_RELWITHDEBINFO:STRING="-Os -g -D NDEBUG" \ -D CMAKE_C_FLAGS_RELEASE:STRING="-Os -ffunction-sections -fdata-sections -Wl,--gc-sections -D NDEBUG" \ -D BUILD_ANDROID_EXAMPLES:BOOL="0" \ -D BUILD_opencv_video:BOOL="0" \ -D BUILD_WITH_DEBUG_INFO:BOOL="0" \ -D WITH_JASPER:BOOL="0" \ -D WITH_JPEG:BOOL="1" \ -D BUILD_opencv_photo:BOOL="0" \ -D BUILD_opencv_videoio:BOOL="0" \ -D BUILD_opencv_ts:BOOL="0" \ -D WITH_CAROTENE:BOOL="0" \ -D BUILD_opencv_stitching:BOOL="0" \ -D CMAKE_C_FLAGS:STRING="" \ -D BUILD_FAT_JAVA_LIB:BOOL="0" \ -D BUILD_OPENEXR:BOOL="0" \ -D BUILD_PERF_TESTS:BOOL="0" \ -D BUILD_opencv_videostab:BOOL="0" \ -D WITH_EIGEN:BOOL="0" \ -D BUILD_JASPER:BOOL="0" \ -D WITH_TBB:BOOL="1" \ -D WITH_IPP:BOOL="0" \ -D WITH_WEBP:BOOL="0" \ -D BUILD_opencv_superres:BOOL="0" \ -D BUILD_opencv_shape:BOOL="0" \ -D BUILD_opencv_dnn:BOOL="1" \ -D BUILD_PACKAGE:BOOL="0" \ -D BUILD_TESTS:BOOL="0" \ -D WITH_OPENEXR:BOOL="0" \ -D WITH_CUDA:BOOL="0" \ -D WITH_CUFFT:BOOL="0" \ -D BUILD_PNG:BOOL="1" \ -D BUILD_JPEG:BOOL="1" \ -D BUILD_DOCS:BOOL="0" \ -D BUILD_TIFF:BOOL="0" \ -D WITH_PNG:BOOL="1" \ $opencvSource

我已添加到Android项目,但是我获得了许多对opencv函数的未定义引用

Android Studio使用cmake 3.10.2

示例:

error: undefined reference to 'cv::cvtColor(cv::_InputArray const&, cv::_OutputArray const&, int, int)' error: undefined reference to 'cv::extractChannel(cv::_InputArray const&, cv::_OutputArray const&, int)' error: undefined reference to 'cv::Mat::copyTo(cv::_OutputArray const&) const'

1 个答案:

答案 0 :(得分:0)

我最终使用gcc作为编译器,使用gnustatic作为STL和opencv的工具链。 这是最终命令

cmake \
    -DANDROID_ABI:STRING=$currentArch \
    -DANDROID_TOOLCHAIN_NAME:STRING=$currentArchVersion \
    -D ANDROID_NDK:PATH="/Users/analivia/Library/Android/sdk/ndk-bundle" \
    -D ANDROID_NDK_HOST_X64:BOOL="1" \
    -D ANDROID_NATIVE_API_LEVEL=24 \
    -D ANDROID_SDK_ROOT:PATH="/Users/analivia/Library/Android/sdk" \
    -D CMAKE_TOOLCHAIN_FILE:FILEPATH="$opencvSource/platforms/android/android.toolchain.cmake" \
    -D CMAKE_CXX_FLAGS_MINSIZEREL:STRING="-Os -ffunction-sections -fdata-sections -Wl,--gc-sections -D NDEBUG" \
    -D CMAKE_CXX_FLAGS_RELEASE:STRING="-Os -ffunction-sections -fdata-sections -Wl,--gc-sections -D NDEBUG" \
    -D CMAKE_CXX_FLAGS_RELWITHDEBINFO:STRING="-Os -g -D NDEBUG" \
    -D CMAKE_C_FLAGS_RELEASE:STRING="-Os -ffunction-sections -fdata-sections -Wl,--gc-sections -D NDEBUG" \
    -D BUILD_ANDROID_EXAMPLES:BOOL="0" \
    -D BUILD_opencv_video:BOOL="0" \
    -D BUILD_WITH_DEBUG_INFO:BOOL="0" \
    -D WITH_JASPER:BOOL="0" \
    -D WITH_JPEG:BOOL="1" \
    -D BUILD_opencv_photo:BOOL="0" \
    -D BUILD_opencv_videoio:BOOL="0" \
    -D BUILD_opencv_ts:BOOL="0" \
    -D WITH_CAROTENE:BOOL="0" \
    -D BUILD_opencv_stitching:BOOL="0" \
    -D CMAKE_C_FLAGS:STRING="" \
    -D BUILD_FAT_JAVA_LIB:BOOL="1" \
    -D BUILD_OPENEXR:BOOL="0" \
    -D BUILD_PERF_TESTS:BOOL="0" \
    -D BUILD_opencv_videostab:BOOL="0" \
    -D WITH_EIGEN:BOOL="0" \
    -D BUILD_JASPER:BOOL="0" \
    -D WITH_TBB:BOOL="1" \
    -D WITH_IPP:BOOL="0" \
    -D WITH_WEBP:BOOL="0" \
    -D BUILD_opencv_superres:BOOL="0" \
    -D BUILD_opencv_shape:BOOL="0" \
    -D BUILD_PACKAGE:BOOL="0" \
    -D BUILD_TESTS:BOOL="0" \
    -D WITH_OPENEXR:BOOL="0" \
    -D WITH_CUDA:BOOL="0" \
    -D WITH_CUFFT:BOOL="0" \
    -D BUILD_PNG:BOOL="1" \
    -D BUILD_JPEG:BOOL="1" \
    -D BUILD_DOCS:BOOL="0" \
    -D BUILD_TIFF:BOOL="0" \
    -D WITH_PNG:BOOL="1" \