如何将.a链接到.so并为Android创建新的.so [英] How to link .a to .so and create new .so for android

查看:95
本文介绍了如何将.a链接到.so并为Android创建新的.so的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个现有的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.

推荐答案

如果通过.aar预制提供本机预构建的库,则这是

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:

  1. 按以下顺序放置预构建的库:

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

  1. 在项目.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)

  1. 现在您可以在项目中使用它们了.

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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆