如何从 ndk 中的不同源文件为不同的 ABI 构建具有相同模块名称的库?
How to build library with the same MODULE name for different ABI from different source file in ndk?
在 ndk 中,我想为来自不同源文件的不同 ABI 构建具有相同模块名称的库。
我在目录下有两个来源:armeabi-v7a 和 arm64-v8a
这是我的 Android.mk:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := session
LOCAL_SRC_FILES := armeabi-v7a/libsession.so
TARGET_ARCH_ABI := armeabi-v7a
include $(PREBUILT_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := session
LOCAL_SRC_FILES := arm64-v8a/libsession.so
TARGET_ARCH_ABI := arm64-v8a
include $(PREBUILT_SHARED_LIBRARY)
这是我的 Application.mk:
APP_STL := gnustl_static
APP_CPPFLAGS := -frtti -fexceptions
APP_ABI := armeabi-v7a arm64-v8a
APP_PLATFORM := android-21
但失败了:
Android NDK:尝试在 jni/Android.mk.
中定义本地模块 'session'
Android NDK: 但是这个模块已经被 jni/Android.mk 定义了。
如何实现?
最简单的方法是利用您的 .so 文件似乎位于以 ABI 命名的子目录中的事实:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := session
LOCAL_SRC_FILES := $(TARGET_ARCH_ABI)/libsession.so
include $(PREBUILT_SHARED_LIBRARY)
如果不是这种情况,您可以检查 TARGET_ARCH_ABI
的值并采取相应的行动。例如:
ifeq ($(TARGET_ARCH_ABI),armeabi-v7a)
LOCAL_SRC_FILES := foo/libfoo.so
else ifeq ($(TARGET_ARCH_ABI),arm64-v8a)
LOCAL_SRC_FILES := bar/libbar.so
endif
无需自己设置 TARGET_ARCH_ABI
- 它由构建系统为您设置。
在 ndk 中,我想为来自不同源文件的不同 ABI 构建具有相同模块名称的库。
我在目录下有两个来源:armeabi-v7a 和 arm64-v8a
这是我的 Android.mk:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := session
LOCAL_SRC_FILES := armeabi-v7a/libsession.so
TARGET_ARCH_ABI := armeabi-v7a
include $(PREBUILT_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := session
LOCAL_SRC_FILES := arm64-v8a/libsession.so
TARGET_ARCH_ABI := arm64-v8a
include $(PREBUILT_SHARED_LIBRARY)
这是我的 Application.mk:
APP_STL := gnustl_static
APP_CPPFLAGS := -frtti -fexceptions
APP_ABI := armeabi-v7a arm64-v8a
APP_PLATFORM := android-21
但失败了:
Android NDK:尝试在 jni/Android.mk.
中定义本地模块 'session'
Android NDK: 但是这个模块已经被 jni/Android.mk 定义了。
如何实现?
最简单的方法是利用您的 .so 文件似乎位于以 ABI 命名的子目录中的事实:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := session
LOCAL_SRC_FILES := $(TARGET_ARCH_ABI)/libsession.so
include $(PREBUILT_SHARED_LIBRARY)
如果不是这种情况,您可以检查 TARGET_ARCH_ABI
的值并采取相应的行动。例如:
ifeq ($(TARGET_ARCH_ABI),armeabi-v7a)
LOCAL_SRC_FILES := foo/libfoo.so
else ifeq ($(TARGET_ARCH_ABI),arm64-v8a)
LOCAL_SRC_FILES := bar/libbar.so
endif
无需自己设置 TARGET_ARCH_ABI
- 它由构建系统为您设置。