Android studio 編譯c++程序 emplace_back 問題

Android環境:

    compileSdkVersion 26
    defaultConfig {
        applicationId "com.example.chijing.myapplication"
        //minSdkVersion 26
        //targetSdkVersion 27
        minSdkVersion 26
        targetSdkVersion 26
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        externalNativeBuild {
            cmake {
                cppFlags "-frtti", "-fexceptions", "-std=c++11", "-Os", "-s", "-ffunction-sections", "-fdata-sections"

                //arguments    "-DANDROID_STL=c++_shared" ,"-ARCH=arm",  "-ABI_TYPE=armeabi-v7a"

                ndk {
                    //moduleName "jary"         //生成的so名字
                    abiFilters "armeabi-v7a"  //輸出指定三種abi體系結構下的so庫。
                    stl "c++_shared"
                }
            }
        }
        signingConfig signingConfigs.config
    }
    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
//        debug
//            {
//                jniDebuggable = true
//                minifyEnabled = false
//                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
//
//            }
        debug {
            signingConfig signingConfigs.config
        }
    }
    sourceSets {
        main {
            jniLibs.srcDirs = ['libs']
        }
    }
    externalNativeBuild {
        cmake {
            path 'D:/source/kernel/CMakeLists.txt'
        }
    }

c++ 用的c++ 11, 無其他特殊環境,

 

當使用std::vector<T>::emplace_back 的時候,  T不能有copy構造函數, 否則將無法編譯成功,  3種方案:

1:  註釋掉T的拷貝構造函數

2: 不調用emplace_back, 直接實例化T對象, 然後使用push_back(T)

3: 使用ifdef  區分Android 和非Android代碼 , 分別調用push_back和emplace_back

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章