【问题标题】:OpenCV for Android: undefined reference to std::ios_base::Init::Init() while linking适用于 Android 的 OpenCV:链接时对 std::ios_base::Init::Init() 的未定义引用
【发布时间】:2020-03-15 01:26:30
【问题描述】:

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

我在Android Studio 3.5 上配置opencv for android 3.4.7。我通过编辑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());
}

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

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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-11
      • 2021-06-09
      • 1970-01-01
      相关资源
      最近更新 更多