如何将 .a 链接到 .so 并为 android 创建新的 .so [英] How to link .a to .so and create new .so for android
问题描述
我有一个现有的 android 项目,其中一个 .so(比如 existing.so)被打包并加载到一些 .aar(比如 existing.aar)中.该 existing.so 文件公开了一个符号(函数),我的 .a (my.a) 静态库将使用该符号.如何在该特定项目中包含 my.a 文件,以便它获得到 existing.so 的链接?应该创建一个新的 .so 链接 my.a 和 existing.so 吗?我可以在现有项目中添加 cmake 或 ndk 依赖项.
I have an existing android project where a .so (say existing.so) is packaged and loaded in some .aar (say existing.aar). That existing.so file exposed a symbol(funcion) which my .a (my.a) static library will use. How to include my.a file in that particular project so that it get links to existing.so ? Should a new .so made linking my.a and existing.so ? I can add cmake or ndk dependency in that existing project.
推荐答案
如果通过 .aar 预制件提供本机预建库,这里有一个 link 来自 Android 开发者关于如何做到这一点,如果没有,你需要像普通 CMake 项目一样去做:
If the native prebuilt libraries are provided via the .aar prefab, here's a link from Android Developers of how to do it, if not, you need to do it like you would for a normal CMake project:
- 按以下顺序放置您的预构建库:
libs/${ANDROID_PLATFORM}/${ANDROID_ABI}/existing
libs/${ANDROID_PLATFORM}/${ANDROID_ABI}/my
例如:
libs/android-28/x86_64/existing/lib/existing.so
libs/android-28/x86_64/existing/include/existing.h
libs/android-28/x86_64/my/lib/my.a
libs/android-28/x86_64/my/include/my.h
- 在您的项目中添加 APPEND CMAKE_FIND_ROOT_PATH 的路径.so:
list(APPEND CMAKE_FIND_ROOT_PATH libs/${ANDROID_PLATFORM}/${ANDROID_ABI}/existing)
list(APPEND CMAKE_FIND_ROOT_PATH libs/${ANDROID_PLATFORM}/${ANDROID_ABI}/my)
- 现在您可以在您的项目中使用它们 .so:
find_library(existing_lib existing)
find_library(my_lib my)
add_library(project SHARED <source_files>)
target_link_libraries(project existing_lib my_lib)
这篇关于如何将 .a 链接到 .so 并为 android 创建新的 .so的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!