如何解决如何将.a链接到.so并为Android创建新的.so
我有一个现有的android项目,其中将.so(例如existing.so)打包并加载到某些.aar(例如existing.aar)中。该现存的.so文件公开了我的.a(my.a)静态库将使用的符号(功能)。如何将my.a文件包含在该特定项目中,以便它获得到existing.so的链接?是否应该使用新的.so链接my.a和existing.so?我可以在该现有项目中添加cmake或ndk依赖项。
解决方法
如果本地预建库是通过.aar预制提供的,那么这是Android开发人员的link,有关如何执行的操作,如果没有,则需要像正常的CMake项目一样进行操作:
- 按以下顺序放置预构建的库:
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)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。