Как установить стандарт C99 для компиляции Android NDK проекта

Я хочу собрать небольшую библиотеку, которая была написана на C99 для Android, но компилятор дал лог как

note: use option -std=c99 or -std=gnu99 to compile your code

Где я могу установить это?

Ответы на вопрос(3)

Согласно документам NDK (зеркало kandroid.org), LOCAL_CFLAGS будет применяться только к каждому модулю - если вы хотите, чтобы это поведение распространялось на весь проект, установите APP_CFLAGS в Application.mk. Кроме того, CFLAGS будет охватывать источники C и C ++, CPPFLAGS - только C ++.

 MandisaW16 мар. 2014 г., 17:19
Лисариен, ты можешьпросто замените один на другой - APP_CFLAGS должен идти в другом файле, Application.mk, а не Android.mk.
 Lisarien15 мар. 2014 г., 09:54
Спасибо @MandisaW за это дополнение, но замена LOCAL_CFLAGS на APP_CFLAGS в выражении LOCAL_CFLAGS + = -std = c99 у меня не работает.

установить стандарт C99 для компиляции Android NDK проекта "Я думаю, что это нуждается в обновлении.

Для Android Studio 1.4 с Gradle 2.5 c99 можно установить в build.gradle

ЗАМЕТЬТЕ, ЧТО ЧУВСТВИТЕЛЬНЫЙ СИНТАКСИС СЛУЧАЯ В BUILD.GRADLE ИЗМЕНИЛСЯ ОТ cFlags К CFlags (многие примеры онлайн используют старый синтаксис).

вот build.gradle, модифицированный из примера проекта hello-jni с добавленной поддержкой C99.

apply plugin: 'com.android.model.application'

model {
    android {
        compileSdkVersion = 23
        buildToolsVersion = "23.0.0"

        defaultConfig.with {
            applicationId = "com.example.hellojni"
            minSdkVersion.apiLevel = 4
            targetSdkVersion.apiLevel = 23
        }
    }

    compileOptions.with {
        sourceCompatibility=JavaVersion.VERSION_1_7
        targetCompatibility=JavaVersion.VERSION_1_7
    }

    /*
     * native build settings
     */
    android.ndk {
        moduleName = "hello-jni"
            CFlags += "-std=c99"
    }
    android.buildTypes {
        release {
            minifyEnabled = false
            proguardFiles  += file('proguard-rules.txt')
        }
    }
    android.productFlavors {
        // for detailed abiFilter descriptions, refer to "Supported ABIs" @
        // https://developer.android.com/ndk/guides/abis.html#sa
        create("arm") {
            ndk.abiFilters += "armeabi"
        }
        create("arm7") {
            ndk.abiFilters += "armeabi-v7a"
        }
        create("arm8") {
            ndk.abiFilters += "arm64-v8a"
        }
        create("x86") {
            ndk.abiFilters += "x86"
        }
        create("x86-64") {
            ndk.abiFilters += "x86_64"
        }
        create("mips") {
            ndk.abiFilters += "mips"
        }
        create("mips-64") {
            ndk.abiFilters += "mips64"
        }
        // To include all cpu architectures, leaves abiFilters empty
        create("all")
    }
}
Решение Вопроса

В вашем Android.mk добавить

LOCAL_CFLAGS += -std=c99

Например:

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_CFLAGS += -std=c99
LOCAL_SRC_FILES := com_example_ndktest_TestLib.c
LOCAL_MODULE := com_example_ndktest_TestLib
include $(BUILD_SHARED_LIBRARY)

Убедитесь, что вы добавилиLOCAL_CFLAGS» после добавлениявключает $ (CLEAR_VARS) '

 Lorne K02 окт. 2015 г., 03:02
Обратите внимание, что Android studio автоматически создает файл Android.mk. Чтобы использовать пользовательский Android.mk, проверьте этот ответstackoverflow.com/questions/27833530/...
 Lorne K03 окт. 2015 г., 00:04
Мой комментарий на Android.mk устарел - пожалуйста, проверьте мой ответ ниже.

Ваш ответ на вопрос