Android编译器是否支持-Wall?

时间:2018-08-26 14:02:42

标签: android android-ndk linker

我正在尝试在我们的Android.mk中使用以下配方构建共享库。共享库基于C ++库。

include $(CLEAR_VARS)
LOCAL_MODULE := cryptopp_shared
LOCAL_SRC_FILES := $(addprefix $(CRYPTOPP_PATH),$(CRYPTOPP_SRC_FILES))
LOCAL_CPP_FLAGS := -Wall
LOCAL_CPP_FEATURES := rtti exceptions
LOCAL_LDFLAGS := -Wl,--exclude-libs,ALL -Wl,--as-needed

LOCAL_EXPORT_CFLAGS := $(LOCAL_CFLAGS)
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/..

LOCAL_STATIC_LIBRARIES := cpufeatures

include $(BUILD_SHARED_LIBRARY)

库的构建基本上可以。有些选项不受欢迎,例如-Wall。诸如-Wl,--exclude-libs,ALL之类的其他选项也得到了认可。

Android.mk is here的文档,但未讨论删除或过滤选项。

为什么Android的构建系统不兑现我们所有的标志?


这是我们使用的构建命令。我是从库的根目录构建的:

ndk-build V=1 APP_ABI=armeabi-v7a NDK_PROJECT_PATH="$PWD" \
    NDK_APPLICATION_MK="$PWD/Application.mk"

奇怪的是,我们所有的源文件都是C ++,并且没有一个源文件是使用-Wall构建的。但是,我们导入了Android的cpufeatures库,它是一个C源文件,并且是使用-Wall构建的:

/opt/android-ndk-r16b/toolchains/llvm/prebuilt/linux-x86_64/bin/clang -MMD -MP -
MF /home/cryptopp/obj/local/armeabi-v7a/objs/cpufeatures/cpu-features.o.d -gcc-t
oolchain /opt/android-ndk-r16b/toolchains/arm-linux-androideabi-4.9/prebuilt/lin
ux-x86_64 -fpic -ffunction-sections -funwind-tables -fstack-protector-strong -Wn
o-invalid-command-line-argument -Wno-unused-command-line-argument -no-canonical-
prefixes -fno-integrated-as -g -target armv7-none-linux-androideabi18 -march=arm
v7-a -mfloat-abi=softfp -mfpu=vfpv3-d16 -mthumb -Os -DNDEBUG  -I/opt/android-ndk
-r16b/sources/android/cpufeatures   -DANDROID -Wall -Wextra -Werror -D__ANDROID_
API__=18 -Wa,--noexecstack -Wformat -Werror=format-security  --sysroot /opt/andr
oid-ndk-r16b/sysroot -isystem /opt/android-ndk-r16b/sysroot/usr/include/arm-linu
x-androideabi -c  /opt/android-ndk-r16b/sources/android/cpufeatures/cpu-features
.c -o /home/cryptopp/obj/local/armeabi-v7a/objs/cpufeatures/cpu-features.o

鉴于我使用了LOCAL_CPP_FLAGS := -Wall,我想会发生相反的情况-所有C ++源文件都将使用-Wall构建,而一个C文件将不使用{

1 个答案:

答案 0 :(得分:2)

这只是一个错字,您需要LOCAL_CPPFLAGS,那里只需要一个_

对于cpu-features.c,它收到-Wall,因为$(NDK_ROOT)/sources/android/cpufeatures/Android.mkLOCAL_CFLAGS中需要这样做。