我想建立一个用C99编写的小型库,但是编译器给了日志
note: use option -std=c99 or -std=gnu99 to compile your code
我可以在哪里设置它?
答案 0 :(得分: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'
答案 1 :(得分:1)
auselen答案的附录:
根据NDK文档(kandroid.org mirror),LOCAL_CFLAGS仅适用于每个模块 - 如果您希望在整个项目中使用此行为,请在Application.mk中设置APP_CFLAGS。此外,CFLAGS将涵盖C和C ++源,CPPFLAGS仅涵盖C ++。
答案 2 :(得分:1)
由于人们可能会到这里寻找“为编译Android NDK项目设置标准c99”,我认为这需要更新。
对于带有Gradle 2.5的Android Studio 1.4,可以在build.gradle中设置c99
注意BUILD.GRADLE中的CASE敏感语法已从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")
}
}