我见过类似的问题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.txt
和build.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
?
答案 0 :(得分:0)
通常是使用针对与所使用的STL不同的STL构建的库的情况。我无法用您提供的信息来判断,但是在SO上还有许多其他问题,人们在其中使用libc ++构建应用程序,而使用libstdc ++构建opencv。这些不兼容。参见NDK - problems after GNUSTL has been removed from the NDK (revision r18)。