NDK Android - 无法同时构建ARMv5和V7

时间:2013-08-12 13:09:49

标签: android android-ndk java-native-interface shared-libraries

我面临一个奇怪的问题。 我正在为我的Android应用程序构建一个共享库。

我无法同时构建armv5和armv7。 如果我这样做,在第二次运行时(当ndk构建armV7 lib时)我的源文件会出现很多错误,如:

FinderPatternInfo.o: previous definition here
multiple definition of ...

我的 Application.mk

APP_ABI             := armeabi armeabi-v7a
APP_PLATFORM        := android-8
APP_STL             := stlport_static
APP_CPPFLAGS        += -fexceptions

如果我只设置APP_ABI:= armeabi或APP_ABI:= armeabi-v7a ..

有什么想法吗? 谢谢你的帮助,

编辑:Android.mk

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE            := MyModule

MY_LOCAL_INCLUDED_FILES += $(wildcard $(LOCAL_PATH)/*.h)
MY_LOCAL_INCLUDED_FILES += $(wildcard $(LOCAL_PATH)/*.hpp)
MY_LOCAL_INCLUDED_FILES += $(wildcard $(LOCAL_PATH)/bigint/*.h)
... (many includes)

LOCAL_C_INCLUDES        :=  $(subst jni/, , $(MY_LOCAL_INCLUDED_FILES))

MY_LOCAL_SRC_FILES += $(wildcard $(LOCAL_PATH)/*.c)
MY_LOCAL_SRC_FILES += $(wildcard $(LOCAL_PATH)/*.cpp)
MY_LOCAL_SRC_FILES += $(wildcard $(LOCAL_PATH)/bigint/*.c)
.... (many cpp files)

LOCAL_SRC_FILES     :=  $(subst jni/, , $(MY_LOCAL_SRC_FILES))

LOCAL_CFLAGS        := -DNO_ICONV

include $(BUILD_SHARED_LIBRARY)

1 个答案:

答案 0 :(得分:3)

Android make系统会针对每个目标解析您的Android.mk一次,因此当有两个目标时,您的 MY_LOCAL_SRC_FILES 会获取所有.c和.cpp文件的完整集合两次,但仅限当有一个目标时,其中一个。

如果您使用了第一个 MY_LOCAL_SRC_FILES 分配:=而不是+ =,我认为它可以解决问题。