如何将.a链接到.so并为Android创建新的.so [英] How to link .a to .so and create new .so for android
问题描述
我有一个现有的android项目,其中将.so(比如现存的.so)打包并加载到某个.aar(比如现存的.aar)中.该现存的.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.
推荐答案
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
- 在项目.so中将路径添加到APPEND CMAKE_FIND_ROOT_PATH:
list(APPEND CMAKE_FIND_ROOT_PATH libs/${ANDROID_PLATFORM}/${ANDROID_ABI}/existing)
list(APPEND CMAKE_FIND_ROOT_PATH libs/${ANDROID_PLATFORM}/${ANDROID_ABI}/my)
- 现在您可以在项目中使用它们了.
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屋!