【问题标题】:Does Android compiler honor -Wall?Android 编译器是否支持 -Wall?
【发布时间】:2018-08-26 14:02:42
【问题描述】:

我正在尝试使用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 文件将在没有的情况下构建。

【问题讨论】:

    标签: android android-ndk linker


    【解决方案1】:

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

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

    【讨论】:

    • 非常感谢。所以我很清楚......我们应该在LOCAL_CFLAGSLOCAL_CPPFLAGS 中设置-Wall 吗?还是只是LOCAL_CFLAGS?或者只是LOCAL_CPPFLAGS
    • LOCAL_CFLAGS 适用于 C 和 C++。如果需要一些特殊设置,比如-std=c99,可以使用LOCAL_CONLYFLAGS
    猜你喜欢
    • 1970-01-01
    • 2011-09-04
    • 1970-01-01
    • 1970-01-01
    • 2014-10-22
    • 2014-09-30
    • 1970-01-01
    相关资源
    最近更新 更多