Android的NDK:编译不同体系结构不同的库 [英] Android NDK : Compiling different libraries for different architectures
问题描述
我必须为armeabi和armeabi7a编译一个小的C ++库。我也有一个非常大的C ++库,只需要编译armeabi。现在他们正在整理(使用NDK)两种架构,但这让我.apk文件非常大。是否有可能针对大库只为armeabi进行编译?我会怎么做呢?
我的文件夹结构是这样的:
/ JNI / biglib /
/ JNI / smalllib /
/jni/Application.mk
/jni/Android.mk
我/jni/Application.mk文件包含:
APP_ABI:= armeabi-V7A armeabi
APP_OPTIM:=释放
我的根/jni/Android.mk文件结合Android.mk文件,每个库:
LOCAL_PATH:= $(叫我-DIR)
LOCAL_C_INCLUDE:= $(LOCAL_PATH)/包括:包括$(添加preFIX $(LOCAL_PATH)/ $(addsuffix /Android.mk,\\
biglib \\
smalllib \\
))
这是绝对有可能的。还有一些code片段,让你去(不考虑biglib Android.mk的确切内容和smallib我帮不了你更多)。
1) APP_ABI
更改为 APP_ABI:= armeabi armeabi-V7A
在 Application.mk
。
2)修改根目录 Android.mk
:
LOCAL_PATH:= $(叫我-DIR)
LOCAL_C_INCLUDE:= $(LOCAL_PATH)/包括:#biglib没有内置的armeabi,V7A
ifneq$(TARGET_ARCH_ABI),armeabi-V7A
包括$(LOCAL_PATH)/biglib/Android.mk
万一# - - - 剪这里 - - -
#将这个片段的每一个模块,需要biglib,或方便。
#现在,你都会连接biglib的armeabi版本。
IFEQ$(TARGET_ARCH_ABI),armeabi-V7A
LOCAL_LDFLAGS + = $(LOCAL_PATH)/../ OBJ /本地/ armeabi / libbigLib.so
万一
# - - - 剪这里 - - -包括$(LOCAL_PATH)/smalllib/Android.mk
和多数民众赞成 - 你的 APK
现在文件不包含 libbiglib.so
为armeabi-V7A
I have a small c++ library that must be compiled for both armeabi and armeabi7a. I also have a very large c++ library that only needs to be compiled for armeabi. Right now they are being compiled (using NDK) for both architectures, but this is making my .apk very big. Is it possible to target the big library to be compiled only for armeabi? How would I do this?
My folder structure is something like this:
/jni/biglib/
/jni/smalllib/
/jni/Application.mk
/jni/Android.mk
My /jni/Application.mk file contains:
APP_ABI := armeabi-v7a armeabi
APP_OPTIM := release
My root /jni/Android.mk file combines the Android.mk files for each library:
LOCAL_PATH := $(call my-dir)
LOCAL_C_INCLUDE := $(LOCAL_PATH)/include
include $(addprefix $(LOCAL_PATH)/, $(addsuffix /Android.mk, \
biglib \
smalllib \
))
It is definitely possible. There are some code snippets to get you going (without exact content of Android.mk for biglib and smallib I can't help you more).
1) Change order of APP_ABI
to APP_ABI := armeabi armeabi-v7a
in Application.mk
.
2) Modify your root Android.mk
:
LOCAL_PATH := $(call my-dir)
LOCAL_C_INCLUDE := $(LOCAL_PATH)/include
# biglib is not built for armeabi-v7a
ifneq "$(TARGET_ARCH_ABI)" "armeabi-v7a"
include $(LOCAL_PATH)/biglib/Android.mk
endif
# ----- cut here -----
# Place this snippet to every module which needs biglib, or where convenient.
# Now you will link against armeabi version of biglib.
ifeq "$(TARGET_ARCH_ABI)" "armeabi-v7a"
LOCAL_LDFLAGS += $(LOCAL_PATH)/../obj/local/armeabi/libbigLib.so
endif
# ----- cut here -----
include $(LOCAL_PATH)/smalllib/Android.mk
And thats all - your apk
file now doesn't contain libbiglib.so
for armeabi-v7a
这篇关于Android的NDK:编译不同体系结构不同的库的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!