适用于Android的OpenCV:链接时对std :: ios_base :: Init :: Init()的未定义引用

时间:2019-11-19 13:46:57

标签: c++ android-studio android-ndk opencv4android

我见过类似的问题undefined reference to std::ios_base::Init::Init()undefined reference to `std::ios_base::Init::Init()',但是我不确定情况是否相同。

我正在opencv for android 3.4.7上配置Android Studio 3.5。我通过编辑CMakeList.txtbuild.gradle导入了opencv库:

set(opencv_version OpenCV3-android-sdk)

set(OpenCV_STATIC ON)
set(OpenCV_DIR /home/lynx/Android/Proj/${opencv_version}/sdk/native/jni)
find_package(OpenCV REQUIRED)
if (OpenCV_FOUND)
    message(WARNING "opencv libs: ${OpenCV_LIBS}")
else (OpenCV_FOUND)
    message(WARNING "opencv not found!")
endif(OpenCV_FOUND)

target_link_libraries(
        ${OpenCV_LIBS})
sourceSets {
    main {
        jniLibs.srcDirs = ['/home/lynx/Android/Proj/OpenCV3-android-sdk/sdk/native/libs']
    }
}

我的native-lib.cpp

#include <jni.h>
#include <string>
#include <iostream>
#include <opencv2/opencv.hpp>

using namespace cv;

extern "C" JNIEXPORT jstring JNICALL
Java_com_example_stitch_MainActivity_stringFromJNI(
        JNIEnv *env,
        jobject /* this */) {

    std::string hello = "Hello from OpenCV " + (std::string)CV_VERSION;

    return env->NewStringUTF(hello.c_str());
}

构建项目时,它显示了undefined reference文件中的许多opencv错误。用cpp链接器链接c文件似乎不是问题:它调用clang++来完成任务,当不使用opencv时,项目可以成功构建。

是不是因为我没有正确配置opencv

1 个答案:

答案 0 :(得分:0)

通常是使用针对与所使用的STL不同的STL构建的库的情况。我无法用您提供的信息来判断,但是在SO上还有许多其他问题,人们在其中使用libc ++构建应用程序,而使用libstdc ++构建opencv。这些不兼容。参见NDK - problems after GNUSTL has been removed from the NDK (revision r18)