【发布时间】:2016-02-16 11:33:07
【问题描述】:
我已经在 Eclipse 中使用 NDK 构建器构建了一个 C++ 共享库(创建一个没有 MainActivity 的 JNI 项目),它提供了我在 Application.mk 文件中指定的不同平台作为输出。输出位于 /obj/local/ 目录中,分布在平台子目录(armabi、mips 等,即我在上述文件中指定的所有平台)中。 现在,我想在 Android 本机项目中使用这个共享库,我的共享库在项目的本机库中被调用(因此它是关于“native-calling-native”)。 如果我只为一种类型的平台(比如说“armeabi”)构建共享库和 Android 本机应用程序,那么一切正常。 我的问题是如何创建 Android 本机项目的 make 文件 Android.mk 和 Application.mk,以便为所有平台构建。 我想关键在 Android.mk 文件中,对于一个平台构建,它看起来像这样(在 Linux 上,对于 .so 类型,对于信息 C++11):
LOCAL_PATH := $(call my-dir)
# Define the shared library module used by the calling JNI C++ module
include $(CLEAR_VARS)
LOCAL_SRC_FILES := libs/libCreateSharedWithJni.so
LOCAL_MODULE := CreateSharedWithJni
LOCAL_EXPORT_C_INCLUDES := libs/CreateSharedWithJni.h
include $(PREBUILT_SHARED_LIBRARY)
# Define the calling JNI C++ module
include $(CLEAR_VARS)
LOCAL_C_INCLUDES := $(LOCAL_PATH)
LOCAL_MODULE := finalmodule
LOCAL_SRC_FILES := CppJniCallShared.cpp
LOCAL_SHARED_LIBRARIES := libCreateSharedWithJni
include $(BUILD_SHARED_LIBRARY)
谢谢!
【问题讨论】:
-
您是否尝试在 Application.mk 中指定“APP_ABI = all”?
-
是的,得到与第一次平台尝试(arm64-v8a)相关的“make Error 1”。对于上面的 make 文件配置,只接受一个共享库,它应该和我说的在同一个平台上。
标签: eclipse c++11 android-ndk shared-libraries multiplatform