android studio cmake生成.a文件(静态库)及调用(c c++)静态库.a

第一步生成静态库.a文件:

cmake 语法如何生成静态库,就不介绍了,比较简单,我下文列出的参考资料里面有详细介绍。

add_library(${
   CMAKE_PROJECT_NAME} STATIC
         src/CalculStatic.cpp
        )

在这里插入图片描述

这一步有坑,我刚开始的时候,也花了不少时间,死活都没有生成.a静态库文件。但是我多方查找资料,发现是可以生成静态库文件的。关键是要配置“targets” 。这个属性只有在“ defaultConfig” 下面才能配置出来,在大括号“android ”下面配置的“cmake ”是没有“targets”这个属性的,我就是因为在此耽搁了不少时间。一定要谨慎。

参考资料:https://stackoverflow.com/questions/64829357/specify-targets-in-externalnativebuild-of-the-build-gradle-file-no-signature-o

正确的build.gradle配置如下:

android {
   

    defaultConfig {
   
        :
        externalNativeBuild {
   
            cmake {
   
               targets "calStatic" // New line here!
            }
        }
    }

    externalNativeBuild {
   
        cmake {
   
            path "src/main/cpp/CMakeLists.txt"
            version "3.10.2"
            // targets "native-lib"  // Not here!
        }
    }
}

重新运行项目或者“Make Project”. 重新刷新目录,静态库.a文件就可以正确生成了。

参考资料:
android studio生成静态库没有*.a目标文件问题
android studio 3.2 使用cmake在jni生成及使用C/C++静态库

第二步使用静态库.a文件:

限制我们需要来调用我们刚刚生成的静态库.a文件

在这里插入图片描述

CMakeLists.txt文章来源地址https://uudwc.com/A/aYk4z


cmake_minimum_required(VERSION 3.22.1)

project("cmake")

add_library(${
   CMAKE_PROJECT_NAME} SHARED
            native-lib.cpp
            src/libtest.c
        )

#导入已经编译好的静态库 或者 动态库  本例导入的静态库
add_library(calStatic STATIC IMPORTED)
#设置静态库导入的路径
set_target_properties(calStatic PROPERTIES IMPORTED_LOCATION
        ${
   CMAKE_CURRENT_SOURCE_DIR}/jni/${
   CMAKE_ANDROID_ARCH_ABI}/libcalStatic.a
)

#通过target_link_libraries命令指明库文件,且通过target_include_directories命令指明相应的库头文件
target_include_directories

原文地址:https://blog.csdn.net/qingfeng812/article/details/132674778

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请联系站长进行投诉反馈,一经查实,立即删除!

h
上一篇 2023年09月12日 06:13
【AIGC专题】Stable Diffusion 从入门到企业级实战0402
下一篇 2023年09月12日 06:13