【问题标题】:Build NDK with included shared library on multiple platforms在多个平台上使用包含的共享库构建 NDK
【发布时间】: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


【解决方案1】:

知道了! 在上面的 Android.mk 文件中,只需将行更改如下

LOCAL_SRC_FILES := libs/$(TARGET_ARCH_ABI)/libCreateSoWithJni.so

即在路径中使用 $(TARGET_ARCH_ABI) 驱动构建器处理 Application.mk APP_ABI 变量中指定的所有平台。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-01
    • 1970-01-01
    • 2014-03-22
    • 1970-01-01
    • 1970-01-01
    • 2011-12-17
    • 1970-01-01
    相关资源
    最近更新 更多