NDK Android的 - 不能在同一时间建立的ARMv5和V7 [英] NDK Android - Can't build ARMv5 and V7 at the same time

查看:721
本文介绍了NDK Android的 - 不能在同一时间建立的ARMv5和V7的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我现在面临一个奇怪的问题。
我建立一个共享库我的Andr​​oid应用程序。

我不能同时既建立的ARMv5和ARMv7。
如果我这样做,我得到了很多错误,在对第二次运行我的源文件(当NDK构建的ARMv7 LIB),如:

  FinderPatternInfo.o:previous定义在这里
多重定义...

我的 Application.mk

  APP_ABI:= armeabi armeabi,V7A
APP_PLATFORM:=机器人-8
APP_STL:= stlport_static
APP_CPPFLAGS + = -fexceptions

它完美,如果我只设置APP_ABI:= armeabi或APP_ABI:= armeabi-V7A ..

你知道吗?
感谢你的帮助,

编辑:Android.mk

  LOCAL_PATH:= $(叫我-DIR)
包括$(CLEAR_VARS)
LOCAL_MODULE:= MyModule的MY_LOCAL_INCLUDED_FILES + = $($通配符(LOCAL_PATH)/ *高)
MY_LOCAL_INCLUDED_FILES + = $($通配符(LOCAL_PATH)/ *。HPP)
MY_LOCAL_INCLUDED_FILES + = $($通配符(LOCAL_PATH)/ BIGINT / *高)
......(很多包括)LOCAL_C_INCLUDES:= $(SUBST JNI /,$(MY_LOCAL_INCLUDED_FILES))MY_LOCAL_SRC_FILES + = $($通配符(LOCAL_PATH)/ * C)
MY_LOCAL_SRC_FILES + = $($通配符(LOCAL_PATH)/ *。CPP)
MY_LOCAL_SRC_FILES + = $($通配符(LOCAL_PATH)/ BIGINT / * C)
....(很多cpp文件)LOCAL_SRC_FILES:= $(SUBST JNI /,$(MY_LOCAL_SRC_FILES))LOCAL_CFLAGS:= -DNO_ICONV包括$(BUILD_SHARED_LIBRARY)


解决方案

而Android系统让您解析一次Android.mk为每一个目标,所以你的 MY_LOCAL_SRC_FILES 获取全套所有的。 c和.cpp文件两次当有两个目标,但每次只有一个时,有一个单一的目标。

如果您的第一个 MY_LOCAL_SRC_FILES 分配使用:=代替+ =,我认为这将解决这个问题。

I'm facing a weird problem. I'm building a shared library for my Android application.

I can't build both armv5 and armv7 at the same time. If I do so, I get a lot of errors on my source files at the second run (when the ndk build the armV7 lib) like:

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

My Application.mk

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

It works perfectly if I only set APP_ABI := armeabi or APP_ABI := armeabi-v7a..

Any idea ? Thank you for your help,

EDIT: 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)

解决方案

The Android make system parses your Android.mk once for each target, so your MY_LOCAL_SRC_FILES gets a full set of all of your .c and .cpp files twice when there are two targets, but only one of each when there's a single target.

If your first MY_LOCAL_SRC_FILES assignment used := instead of +=, I think it would fix the problem.

这篇关于NDK Android的 - 不能在同一时间建立的ARMv5和V7的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆