我正在尝试在我们的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.mk
在LOCAL_CFLAGS
中需要这样做。