首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >OpenCV Android连接CXX共享失败

OpenCV Android连接CXX共享失败
EN

Stack Overflow用户
提问于 2021-01-26 10:04:40
回答 1查看 771关注 0票数 0

我正在尝试用Android4.1.1配置OpenCV 4.5.1来做一些图像处理,并且已经被以下错误击中了。我已经在网上搜了两天,找不到解决办法。

生成命令失败。使用参数{ C:\Users\User_folder\AppData\Local\Android\Sdk\cmake\3.10.2.4988404\bin\ninja.exe C:\Users\User_folder\opencv6test\sdk.cxx\cmake\debug\arm64-v8a本机库opencv_jni_shared} ninja执行进程Java_com_example_opencv6test_MainActivity_testFunction':C:/Users/User_folder/opencv6test/sdk/libcxx_helper/native-lib.cpp:12:时出错:输入目录C:\Users\User_folder\opencv6test\sdk\.cxx\cmake\debug\arm64-v8a' [1/1] Linking CXX shared library C:\Users\User_folder\opencv6test\sdk\build\intermediates\cmake\debug\obj\arm64-v8a\libnative-lib.so FAILED: C:/Users/User_folder/opencv6test/sdk/build/intermediates/cmake/debug/obj/arm64-v8a/libnative-lib.so cmd.exe /C "cd . && C:\Users\User_folder\AppData\Local\Android\Sdk\ndk\21.1.6352462\toolchains\llvm\prebuilt\windows-x86_64\bin\clang++.exe --target=aarch64-none-linux-android21 --gcc-toolchain=C:/Users/User_folder/AppData/Local/Android/Sdk/ndk/21.1.6352462/toolchains/llvm/prebuilt/windows-x86_64 --sysroot=C:/Users/User_folder/AppData/Local/Android/Sdk/ndk/21.1.6352462/toolchains/llvm/prebuilt/windows-x86_64/sysroot -fPIC -g -DANDROID -fdata-sections -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -D_FORTIFY_SOURCE=2 -Wformat -Werror=format-security -std=gnu++11 -O0 -fno-limit-debug-info -Wl,--exclude-libs,libgcc.a -Wl,--exclude-libs,libgcc_real.a -Wl,--exclude-libs,libatomic.a -Wl,--build-id -Wl,--fatal-warnings -Wl,--no-undefined -Qunused-arguments -shared -Wl,-soname,libnative-lib.so -o C:\Users\User_folder\opencv6test\sdk\build\intermediates\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: In function Java_com_example_opencv6test_MainActivity_testFunction‘:C:/Users/User_folder/opencv6test/sdk/libcxx_helper/native-lib.cpp:12:未定义的引用‘`cv::cvtColor(cv::_InputArray const&,cv::_OutputArray const&,int,int)‘clang++:clang++:linker命令失败,退出代码1(使用-v查看调用)忍者:构建停止:子命令失败。

我的理解是,根本的问题是链接CXX共享库失败,这是由于NDK版本和OpenCV版本之间的不兼容。但我不知道如何为我的母语lib.cpp修复这个问题。我试着在OpenCV级中使用gnustatic,但是出现了一个错误,说明不再支持它。

任何帮助都将不胜感激。

我的中文雅思:

代码语言:javascript
运行
复制
    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})

土著-lib.cpp:

代码语言:javascript
运行
复制
#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);

}

开式履历表:

代码语言:javascript
运行
复制
android {
    compileSdkVersion 30

    defaultConfig {
        minSdkVersion 21
        targetSdkVersion 30

        versionCode openCVersionCode
        versionName openCVersionName

        externalNativeBuild {
            cmake {
                arguments "-DANDROID_STL=c++_shared"
                targets "opencv_jni_shared" ,"native-lib"
            }
        }
    }

我的NDK:

21.1.6352462安装

EN

Stack Overflow用户

发布于 2021-01-26 13:22:07

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

代码语言:javascript
运行
复制
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
        )
票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65899274

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档