使用CMake引入第三方so库及头文件并调用头文件声明的函数

首先,要调用别人的so库和头文件,我们自己项目中需要有NDK。
因为只有C++代码才能直接调用C++代码,也就是头文件和so库的函数。

其次,就是要想办法把头文件,so库和项目中的NDK关联起来,然后作为一个整体,生成一个jni,供Java层调用。

最后,二者的关联是通过CMake完成的。

项目目录

一.具体讲解一下CMakeLists.txt写法

1.target_include_directories 将头文件与自己项目的ndk关联
注意是add,不是add/
add指的是cpp目录下的add文件夹
#将native-lib 关联到第三方库头文件 下面的路径是第三方头文件的路径

target_include_directories(${CMAKE_PROJECT_NAME} PRIVATEadd)

2.将第三方so库和自身项目的NDK关联

2.1 add_library将要导入的so库加入到library中,注意每个so库都分开导入

导入第三方库,不同的第三方库需要分开导入,有两个so库需要导入,所以写两次

add_library(testjni SHARED IMPORTED)
add_library(add-lib SHARED IMPORTED)

2.2.set_target_properties告诉CMake so库所在的路径
注意 网上说 ${CMAKE_SOURCE_DIR} 表示源代码的根路径,也就是E:/workas/jnitest/app,这样可以避免硬编码绝对路径。
但是实际打印出来发现#CMAKE_SOURCE_DIR===E:/workas/jnitest/app/src/main/cpp,以至于CMake找不到so库,报错。
具体原因未知,只能先硬编码
#第一个参数为第三方so库名称,第二个指明配置导入第三方so库路径,第三个为第三方库的具体路径
#CMAKE_SOURCE_DIR E:/workas/jnitest/app/src/main/cpp

set_target_properties(testjniPROPERTIES IMPORTED_LOCATION
#        ${CMAKE_SOURCE_DIR}/src/main/jniLibs/${CMAKE_ANDRO

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/184777.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

集合贴2——数据

基础课10——人工智能的基础:大数据-CSDN博客文章浏览阅读126次。人工智能和大数据是相互依存、相互促进的关系。大数据是人工智能的重要基础,没有大数据,人工智能就难以发挥其作用。同时,人工智能也提供了处理和分析大数据的工具…

Capto2024专为Mac电脑设计的屏幕录制和视频编辑软件

不得不说视频编辑功能:Capto提供了多种视频编辑功能,例如剪辑、旋转、裁剪、调整音频和视频的音量、加入水印、添加注释等,你能够使用Capto编辑你的视频,使之更加专业和生动。有目共睹的是录制完成后,你能够使用Capto提…

鸿蒙开发工具DevEco Studio的下载和安装

一、DevEco Studio概述 1、简介 HUAWEI DevEco Studio(获取工具请单击链接下载,以下简称DevEco Studio)是基于IntelliJ IDEA Community开源版本打造,为运行在HarmonyOS和OpenHarmony系统上的应用和服务(以下简称应用…

RS232通讯转485通讯接线心得

最近在接can 485 232的通讯线,无可避免的遇到了一系列问题,各个厂家之间的引脚定义不太一样,这就导致我们要经常的接线,现在也是有了一点心得所以记录下来。接下来进入标题: 目前我遇到的问题是:转接泰琪丰…

asp.net生产线远程故障诊断系统VS开发sqlserver数据库web结构c#编程Microsoft Visual Studio

一、源码特点 asp.net 生产线远程故障诊断系统是一套完善的web设计管理系统,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为vs2010,数据库为sqlserver2008,使用 c#语言开发 asp.net生产线远程故障诊断…

Gorm 中的钩子和回调

一个全面的指南,利用 GORM 中的钩子和回调的力量,为定制的数据库工作流程 在数据库管理领域,定制化是打造高效和定制化工作流程的关键。GORM,这个充满活力的 Go 对象关系映射库,为开发人员提供了钩子和回调的功能&…

程序员想要网上接单?那这几点注意事项你可要记好了!不看后悔!

相信网上接单对于程序员来说并不陌生,甚至有些程序员还以此为主业,靠网上接单来增加收入,维持生计,但是你真的确定你懂网上接单的套路吗?你知道网上接单的注意事项吗?这期文章就来盘点一下,无论…

腾讯云3年云服务器价格及购买教程

腾讯云作为国内领先的云计算服务提供商,提供了多种优惠的云服务器套餐,以满足不同用户的需求,本文将详细介绍腾讯云3年云服务器价格及购买教程,新老用户均可购买! 1、活动页面:传送门>>> 2、进入…

Git 代码库 gogs 部署私服及 https 配置手册

背景 玩了一下 Git ,想到一个问题:企业内部怎么用 Git 呢?仓库哪里来呢? 理一理 Git 及其相关产品的区别: Git 分布式版本管理工具。GitHub 和 Gitee ,基于 Git 的互联网代码托管平台,一个是…

【工具】旋转图片-数据集制作工具, 开源!

转载请注明出处:小锋学长生活大爆炸[xfxuezhang.cn] Github:https://github.com/1061700625/small_tools_v2 之前做了一个下载百度的旋转图片验证码的工具(多进程下载百度旋转验证码图片-制作数据集),那么拿到了图片数据,就需要手…

Flink集群的搭建

1、Flink独立集群模式 1、首先Flink的独立集群模式是不依赖于Hadoop集群。 2、上传压缩包,配置环境: 1、解压: tar -zxvf flink-1.15.2-bin-scala_2.12.tgz2、配置环境变量:vim /etc/profileexport FLINK_HOME/usr/local/soft/fl…

基于机器学习的 ICU 脑血管疾病死亡风险智能预测系统

温馨提示:文末有 CSDN 平台官方提供的学长 Wechat / QQ 名片 :) 1. 项目简介 重症患者或重大手术后的患者在重症监护室(ICU)内通过多种生命支持系统以维持生理功能。患者在ICU 内会被频繁持续的记录生命体征和实验室测量等多种数据。由于高频…

SpringBoot系列之集成Redission入门与实践教程

Redisson是一款基于java开发的开源项目,提供了很多企业级实践,比如分布式锁、消息队列、异步执行等功能。本文基于Springboot2版本集成redisson-spring-boot-starter实现redisson的基本应用 软件环境: JDK 1.8 SpringBoot 2.2.1 Maven 3.2…

CATIA环境编辑器用不了时创建项目快捷方式

CATIA环境编辑器用不了时创建项目快捷方式 一、参考适用情况示例二、 解决步骤(一) 先正确放置winb_64部署包(二) 添加环境文件(三) 修改加入的环境文件(四) 复制本机CATIA快捷方式后重命名(五) 修改快捷方式目标的值 一、参考适用情况示例 二、 解决步骤 (一) 先正确放置winb…

一文掌握 Apache SkyWalking

Apache SkyWalking SkyWalking是一个开源可观测平台,用于收集、分析、聚合和可视化来自服务和云原生基础设施的数据。SkyWalking 提供了一种简单的方法来保持分布式系统的清晰视图,甚至跨云。它是一种现代APM,专为云原生、基于容器的分布式系…

几个月大的幼猫怎么喂?性价比高的幼猫主食罐头推荐

我这些年在经营宠物店的过程中发现,许多铲屎官在猫咪约2个月大时会选择带它们回家喂养。然而,他们可能不知道如何为这个阶段的幼猫提供适当的营养。实际上,幼猫所需的营养成分与成年猫相似,都是高蛋白、中高脂肪和低碳水。而且在这…

【JavaScript】window 对象、location 对象、navigator 对象和 history 对象

1. window 对象 BOM (Browser Object Model ) 是浏览器对象模型: window对象是一个全局对象,也可以说是JavaScript中的顶级对象像document、alert()、console.log()这些都是window的属性,基本BOM的属性和方法都是window的所有通过var定义在全…

AI+BI行业数字化转型研讨会 - 总结精华回顾

带您一起观看研讨会精彩内容回顾! || 导语 AIBI行业数字化转型研讨会—引领未来,智慧转型 德昂信息技术(北京)有限公司于2023年10月26日成功举办了AIBI行业数字化转型研讨会。此次盛会汇聚了产业精英、企业领袖以及技术专家,共同探讨在快速…

pycharm pro v2023.2.4(Python开发)

PyCharm是一种Python集成开发环境(IDE),PyCharm提供了强大的功能,包括语法突出显示、智能代码完成、代码检查、自动重构和调试等特性,这些都可以帮助Python开发人员更加高效地编写代码。 PyCharm Pro是PyCharm的高级版…

性能测试怎么入门?一文7个知识点带你成功入门!

一、相关概念 1、性能测试相关:负载测试,性能测试,压力测试,稳定性测试,全链路测试等 2、性能指标:吞吐率,tps,并发用户数,吞吐量,响应时间等 二、性能测试…