【问题标题】:How to link to other module's library in CMake/Android NDK?如何在 CMake/Android NDK 中链接到其他模块的库?
【发布时间】:2020-06-06 18:27:08
【问题描述】:

我有 2 个 Android NDK 模块,A 和 B。B 依赖于 A,但不能集成在一起,因为 B 只兼容 Android 8.1+,构建时需要另一个 Android 目标。

我使用 CMake 来构建两者。

在构建 B 时如何将 B 链接到 A?

我不想手动指定到../.../../build/intermediates/cmake/[..] 中某处的相对路径。

add_library( A SHARED IMPORTED )
set_target_properties(A PROPERTIES IMPORTED_LOCATION ${CMAKE_CURRENT_SOURCE_DIR}/../../../../A/build/intermediates/cmake/debug/obj/${ANDROID_ABI}/libA.so )

target_link_libraries(B A)

有没有更简洁的方法来做到这一点?

【问题讨论】:

    标签: android cmake android-ndk linker


    【解决方案1】:

    支持的做法是将所有本机项目放在一个模块中。我知道这不符合您的要求,但想澄清一下,不,没有真正“正确”的方式来完成您的要求。

    能够对本机代码进行模块间依赖是https://issuetracker.google.com/120166563。一旦解决了这个问题,你就可以做你真正想做的事了。

    考虑到您的要求,您所拥有的可能是目前最好的选择。我对 Android Gradle API 不是很熟悉,但是您也许可以从 B 的 build.gradle 中获取 A 的 out 目录,并将其作为参数传递给 CMake。我认为您可以为此使用https://google.github.io/android-gradle-dsl/current/com.android.build.gradle.internal.dsl.CmakeOptions.html#com.android.build.gradle.internal.dsl.CmakeOptions:buildStagingDirectory。

    【讨论】:

      猜你喜欢
      • 2016-10-13
      • 2017-03-14
      • 2021-02-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多