5

我想为 Android 构建用 C99 编写的小型库,但编译器给出的日志为

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

我可以在哪里设置?

4

3 回答 3

12

在你的 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)

确保在添加 'include $(CLEAR_VARS)' 后添加 'LOCAL_CFLAGS'

于 2012-11-21T07:49:10.270 回答
1

auselen 回答的附录:

根据 NDK 文档 ( kandroid.org mirror ),LOCAL_CFLAGS 将仅适用于每个模块 - 如果您希望在整个项目中使用此行为,请在 Application.mk 中设置 APP_CFLAGS。此外,CFLAGS 将涵盖 C 和 C++ 源代码,CPPFLAGS 仅涵盖 C++。

于 2013-05-20T21:27:13.727 回答
1

由于人们可能来到这里寻找“为编译 android NDK 项目设置标准 c99”,我认为这需要更新。

对于带有 Gradle 2.5 的 Android Studio 1.4,可以在 build.gradle 中设置 c99

请注意,BUILD.GRADLE 中的区分大小写的语法已从 cFlags 更改为 CFlags(许多在线示例使用旧语法)。

这是从示例 hello-jni 项目修改的 build.gradle,添加了 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")
    }
}
于 2015-10-02T18:09:20.480 回答