android studio集成opencv4android + dlib 庫 爬坑記

問題集合:html

1.std標準庫問題:java

錯誤信息例如:no member named 'to_string' in namespace 'std'android

NDK高版本對std標準庫的支持並不良好,致使,接入opencv後,會由於std庫的問題報錯;
解決方案:
  1)使用低版本ndk 如ndk14
  2)使用高版本NDK從新編譯opencv庫,方法見:https://www.cnblogs.com/qq2523984508/p/9912221.html
  3)opencv3的版本必定沒法使用高版本的ndk,能夠選擇opencv4的版本庫,由於opencv4講std標準庫本身定義了cv庫,因此,能夠使用opencv4來配合高版本的ndk,但中間可能對某些cpu架構沒法獲得支持,好比比較老舊的armeabi。應該說高版本ndk都放棄了比較老舊armeabi架構平臺。c++

 

2.運行時加載so庫時報錯:java.lang.UnsatisfiedLinkError: dlopen failed: library "libc++_shared.so" not found
須要使用 '-DANDROID_STL=c++_shared'來進行cmake編譯:架構

android {
    compileSdkVersion 28
    defaultConfig {
        minSdkVersion 19
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
        multiDexEnabled true
        externalNativeBuild {
            cmake {
                arguments '-DANDROID_PLATFORM=android-28','-DANDROID_TOOLCHAIN=clang', '-DANDROID_STL=c++_shared', '-DCMAKE_BUILD_TYPE=Release ..'
//                arguments '-DANDROID_PLATFORM=android-28','-DANDROID_TOOLCHAIN=clang','-DENABLE_CXX11=ON','-DCMAKE_BUILD_TYPE=Release ..'
                cppFlags "-std=c++14 -O3 -frtti -fexceptions"
            }
        }
        ndk {
            abiFilters 'armeabi-v7a','arm64-v8a'
        }
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    externalNativeBuild {
        cmake {
            path "CMakeLists.txt"
        }
    }
    dataBinding {
        enabled = true
    }
    compileOptions {
        sourceCompatibility = 1.8
        targetCompatibility = 1.8
    }
    buildToolsVersion = '28.0.3'
    sourceSets {
        main {
            jni.srcDirs = ['src/main/jniLibs/']
        }
    }
}

 摘要來自:http://blog.sina.com.cn/s/blog_49b3ba190102z0i1.htmlui

 

3.NDK編譯問題:在NDK編譯時常常會編譯不過報錯,可能須要檢查下android項目路徑,NDK編譯路徑不能太深太長,不然會編譯出問題。猜想可能和C++活着CMACKE有關spa

本文會持續更新。code

相關文章
相關標籤/搜索