【发布时间】: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