【问题标题】:Link to shared library from Android library project with ndk-build使用 ndk-build 从 Android 库项目链接到共享库
【发布时间】:2013-09-03 20:28:18
【问题描述】:

我有一个 Android 库项目“A”,它在“A/jni”文件夹中包含本机 C++ 源代码,可以很好地构建到“A/libs/armeabi-v7a/libA.so”并与其他平台相关。

我现在想在“B/jni”文件夹中创建一个包含 Java 内容以及更多本机 C++ 源代码的 Android 项目“B”。这些源代码使用项目“A”的 C++ 库中的代码。我已经设法通过设置我的

  LOCAL_C_INCLUDES  := (path_to_A/jni) 

(即从项目“A”中获取头文件)。

问题:如何以干净的方式链接到“A/lib/armeabi-v7a/libA.so”?

我已阅读 IMPORT_MODULE 文档,但这似乎是针对您想要链接到纯 NDK 模块而不是位于 Android 库项目中的库的情况。

【问题讨论】:

    标签: java android c++ android-ndk


    【解决方案1】:

    首先创建一个模块,将您的 libA.so 库编译为项目 B 中的预构建共享库。

    include $(CLEAR_VARS)
    LOCAL_MODULE := libA
    LOCAL_SRC_FILES := path/to/libA.so
    include $(PREBUILT_SHARED_LIBRARY)
    

    然后,通过以下方式将此模块添加到项目的主模块中:

    LOCAL_SHARED_LIBRARIES := libA
    

    我从未在我的项目中尝试过 IMPORT_MODULE 选项,但这适用于我的情况。

    【讨论】:

    • 只是为了完成这个答案:为了让它工作,环境变量 NDK_MODULE_PATH 需要包含 libA 顶级文件夹的位置,您需要添加 $(call import-module, libA ) 到项目 B 的 Android.mk 末尾。
    【解决方案2】:

    @Kasper:你说:

    LOCAL_C_INCLUDES  := (path_to_B/jni)
    

    你的意思是:

    LOCAL_C_INCLUDES  := (path_to_A/jni)
    

    ?

    【讨论】:

    • 是的,抱歉,现已修复。
    猜你喜欢
    • 2015-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-09
    • 1970-01-01
    • 2017-09-25
    • 1970-01-01
    相关资源
    最近更新 更多