Как связать с libgcc.a при кросс-компиляции с Android NDK r17 - PullRequest
0 голосов
/ 24 сентября 2018

Я пытаюсь создать скрипт сборки cmake для нативного кода в моем приложении для Android.Я использую Android NDK R17 и построен с Clang.Проблема, с которой я сталкиваюсь, заключается в том, что если я не напишу что-то вроде:

target_link_libraries(my-native-lib "-lgcc")

Я получу ошибку компоновщика:

error: undefined reference to '__aeabi_idiv'

Я думал, что libgcc.a должен быть автоматически связан с этимдело.

Если это не правильно, есть ли лучший способ связаться с ним?

Вот мой скрипт Cmake, довольно простой:

cmake_minimum_required(VERSION 3.5)

project(JNI_LIB)

set (CMAKE_CXX_STANDARD 11)

find_package(FOO CONFIG REQUIRED)
find_package(BAR CONFIG REQUIRED)

file(GLOB JNI_HEADER "*.h*")
file(GLOB JNI_SOURCE "*.c*")

add_library(jni SHARED
  ${JNI_HEADER}
  ${JNI_SOURCE})

target_link_libraries(jni
  FOO
  BAR)

Мой скрипт сборки gradle:

apply plugin: 'com.android.application'

android {
  compileSdkVersion 23

defaultConfig {
    applicationId "com.my.application"
    minSdkVersion 14
    targetSdkVersion 23
    versionCode 1
    versionName "1.0"
    externalNativeBuild {
        cmake {
            arguments '-DANDROID_STL=c++_static','-DANDROID_PLATFORM=android-21'
        }
    }
    ndk {
        abiFilters "armeabi-v7a"
    }
}
buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}
externalNativeBuild {
    cmake {
        path 'src/main/cpp/CMakeLists.txt'
    }
}
sourceSets {
    main {
        jniLibs.srcDirs = ['src/main/jniLibs']
    }
}
}

dependencies {
 implementation fileTree(dir: 'libs', include: ['*.jar'])
 implementation 'com.android.support:appcompat-v7:23.0.1'
 implementation group: 'com.google.protobuf', name: 'protobuf-java', 
 version: '3.2.0'
}
...