如何链接到CMake / Android NDK中的其他模块的库?

问题描述 投票:0回答:1

我有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个回答
0
投票

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

能够对本机代码具有模块间依赖性是https://issuetracker.google.com/120166563。解决此问题后,您就可以执行您实际想要的操作。

根据您的要求,现在拥有的可能是最好的选择。我对Android Gradle API不太熟悉,但是您也许可以从build.gradle中获取B的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

© www.soinside.com 2019 - 2024. All rights reserved.