【问题标题】:How to set standard c99 for compile android NDK project如何为编译android NDK项目设置标准c99
【发布时间】:2012-11-09 04:54:22
【问题描述】:

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

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

在哪里可以设置?

【问题讨论】:

    标签: android-ndk


    【解决方案1】:

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

    【讨论】:

    • 请注意,Android Studio 会自动生成 Android.mk 文件。要使用自定义 Android.mk,请检查此答案 stackoverflow.com/questions/27833530/…
    • 我的 Android.mk 评论已过期 - 请在下面查看我的 gradle 答案。
    【解决方案2】:

    auselen 回答的附录:

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

    【讨论】:

    • 感谢 @MandisaW 的补充,但在语句 LOCAL_CFLAGS += -std=c99 中将 LOCAL_CFLAGS 替换为 APP_CFLAGS,对我不起作用。
    • Lisarien,你不能只用一个替换另一个 - APP_CFLAGS 必须进入另一个文件 Application.mk,而不是 Android.mk。
    【解决方案3】:

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

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

    请注意,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")
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-02-12
      • 1970-01-01
      • 1970-01-01
      • 2014-04-12
      • 1970-01-01
      • 2013-03-30
      • 2016-04-25
      相关资源
      最近更新 更多