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

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

问题描述

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

  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. 在您的项目中添加 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)

  1. 现在您可以在您的项目中使用它们 .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屋!

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