错误:错误:../../../../openssl-armeabi-v7a/lib/libcrypto.a(err.o):不兼容的目标

时间:2017-11-21 12:45:46

标签: android android-ndk openssl

我想在我的项目中包含openssl。我从this example复制了库,但是我收到了上面提到的错误。我在cmake中链接如下

target_link_libraries( # Specifies the target library.
                   native-lib
                    ${CMAKE_CURRENT_SOURCE_DIR}/openssl-armeabi-v7a/lib/libcrypto.a
                    ${CMAKE_CURRENT_SOURCE_DIR}/openssl-armeabi-v7a/lib/libssl.a
                   # Links the target library to the log library
                   # included in the NDK.
                   ${log-lib} ) 

我没有得到我做错的地方?或者在项目中包含openssl是错误的方法。

build.graddle在这里

    apply plugin: 'com.android.application'

android {
    compileSdkVersion 26
    defaultConfig {
        applicationId "com.example.manvish.rsa"
        minSdkVersion 14
        targetSdkVersion 26
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        externalNativeBuild {
            cmake {
                cppFlags "-std=c++11 -frtti -fexceptions"
            }
        }
        ndk {
            abiFilters "x86", "armeabi-v7a", "armeabi"
        }
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

    externalNativeBuild {
        cmake {
            path "CMakeLists.txt"
        }
    }

}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.android.support:appcompat-v7:26.1.0'
    implementation 'com.android.support.constraint:constraint-layout:1.0.2'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.1'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'
}

1 个答案:

答案 0 :(得分:0)

您的 cmake 脚本必须动态选择ABI。 Android Studio会将其提供为-DANDROID_ABI=armeabi-v7a等。

target_link_libraries( # Specifies the target library.
  native-lib
  ${CMAKE_CURRENT_SOURCE_DIR}/openssl-${ANDROID_ABI}/lib/libcrypto.a
  ${CMAKE_CURRENT_SOURCE_DIR}/openssl-${ANDROID_ABI}/lib/libssl.a
   # Links the target library to the log library
   # included in the NDK.
   ${log-lib} ) 

并且不要删除 abiFilters !也许,你可以删除armeabi:今天很少有设备需要它。根据{{​​3}},2017年3月,他们看到98.1% armeabi-v7a 设备和1.7% x86 设备。其余的都是0.2%。