Android ndk OpenCV Android链接CXX共享失败

Android ndk OpenCV Android链接CXX共享失败,android-ndk,opencv4android,Android Ndk,Opencv4android,我正试图用安卓4.1.1配置OpenCV 4.5.1以进行一些图像处理,但遇到以下错误。我在互联网上搜索了两天,没有找到解决方案 生成命令失败。 执行进程C:\Users\User\u folder\AppData\Local\Android\Sdk\cmake\3.10.2.4988404\bin\ninja.exe时出错,参数为{-C:\Users\User\u folder\opencv6test\Sdk.cxx\cmake\debug\arm64-v8a本机库opencv\u jni\u

我正试图用安卓4.1.1配置OpenCV 4.5.1以进行一些图像处理,但遇到以下错误。我在互联网上搜索了两天,没有找到解决方案

生成命令失败。 执行进程C:\Users\User\u folder\AppData\Local\Android\Sdk\cmake\3.10.2.4988404\bin\ninja.exe时出错,参数为{-C:\Users\User\u folder\opencv6test\Sdk.cxx\cmake\debug\arm64-v8a本机库opencv\u jni\u shared} 忍者:进入目录
C:\Users\User\u folder\opencv6test\sdk\.cxx\cmake\debug\arm64-v8a'[1/1]链接CXX共享库C:\Users\User\u folder\opencv6test\sdk\build\mediates\cmake\debug\obj\arm64-v8a\libnative-lib.so失败:C:/Users/User\u folder/opencv6test/sdk/build/mediates/cmake/debug/obj/arm64-v8a/libnative-lib.so cmd.exe/C"光碟,C:\Users\User\u folder\AppData\Local\Android\Sdk\ndk\21.1.6352462\toolschains\llvm\prebuilded\windows-x86\u 64\bin\clang++.exe--target=aarch64-none-linux-android21--gcc toolschain=C:/Users/User\u folder/AppData/Local/Android/Sdk/ndk/21.1.6352462/toolschains/llvm/prebuild/windows-x86\u 64--sysroot=C:/Users/User_folder/AppData/Local/Android/Sdk/ndk/21.1.6352462/toolschains/llvm/prebuild/windows-x86_64/sysroot-fPIC-g-DANDROID-fdata节-ffunction节-funwind表-fstack-protector-strong-无规范前缀-D_-FORTIFY\u-SOURCE=2-Wformat-Werror=format-security-std=gnu++-11-O0-fno-limit调试信息-Wl,--排除libs,libgcc.a-Wl,-排除libs,libgcc_real.a-Wl,-排除libs,libatomic.a-Wl,-构建id-Wl,-致命警告-Wl,-无未定义-使用的参数-shared-Wl,-soname,libnative-lib.so-o C:\Users\User\u folder\opencv6test\sdk\build\mediates\cmake\debug\obj\arm64-v8a\libnative-lib.so CMakeFiles/native lib.dir/native lib.cpp.o-llog-latomic-lm&&cd.“CMakeFiles/native lib.dir/native lib.cpp.o:函数中的
C:/Users/User_folder/opencv6test/sdk/libcxx_helper/native lib.cpp:12:cv::cvtColor(cv:_inputarrayconst&,cv:_outputarrayconst&,int,int)的未定义引用
clang++:错误:链接器命令失败,退出代码为1(使用-v查看调用)
忍者:构建停止:子命令失败

我的理解是,潜在的问题是链接CXX共享库失败,这是由于NDK版本和OpenCV版本之间不兼容。但我不知道如何修复我的native-lib.cpp。我尝试在OpenCV gradle中使用gnustatic,但收到一个错误,说它不再受支持

任何帮助都将不胜感激

我的客户名单:

    cmake_minimum_required(VERSION 3.6)

project(opencv6test CXX)

add_library(opencv_jni_shared STATIC dummy.cpp)

set(OpenCV_DIR C:/Users/User_folder/OpenCV-android-sdk/sdk/native/jni)
set(CMAKE_VERBOSE_MAKEFILE on)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++11")
include_directories(${OpenCV_DIR}/include)

add_library( # Sets the name of the library.
        native-lib

        # Sets the library as a shared library.
        SHARED

        # Provides a relative path to your source file(s).
        native-lib.cpp)




add_library(lib_opencv SHARED IMPORTED)
set_target_properties(lib_opencv PROPERTIES IMPORTED_LOCATION C:/Users/User_folder/opencv6test/sdk/native/libs/${ANDROID_ABI}/libopencv_java4.so)


find_library( # Sets the name of the path variable.
        log-lib

        # Specifies the name of the NDK library that
        # you want CMake to locate.
        log )

# Specifies libraries CMake should link to your target library. You
# can link multiple libraries, such as libraries you define in this
# build script, prebuilt third-party libraries, or system libraries.

target_link_libraries( # Specifies the target library.
        native-lib
        # Links the target library to the log library
        # included in the NDK.
        ${log-lib})
native-lib.cpp:

#include "opencv2/core.hpp"
#include <jni.h>
#include <string>
#include <opencv2/imgproc.hpp>

using namespace cv;
using namespace std;

extern "C" JNIEXPORT void JNICALL
Java_com_example_opencv6test_MainActivity_testFunction(JNIEnv *env, jclass type, jlong addrRGBA){
Mat &img = *(Mat *) addrRGBA; //convert long to a MAT
cvtColor(img, img, COLOR_RGB2GRAY);

}
我的NDK:

21.1.6352462已安装


您似乎错过了链接导入的库:

target_link_libraries( # Specifies the target library.
        native-lib
        # Links the target library to the log library
        # included in the NDK.
        ${log-lib}
        lib_opencv # missed
        )

伙计!它真的很有魅力!非常感谢。我已经连续两天为这个问题苦苦挣扎了,而你指定的那一行让它发挥了作用。我没有足够的重复次数来接受它作为正确答案。也许Mods可以帮上忙。对于其他人来说,这是正确的答案,它正在发挥作用。
target_link_libraries( # Specifies the target library.
        native-lib
        # Links the target library to the log library
        # included in the NDK.
        ${log-lib}
        lib_opencv # missed
        )