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

news2024/11/16 18:02:58

首先,要调用别人的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} PRIVATE
       add)

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(
        testjni
        PROPERTIES IMPORTED_LOCATION
#        ${CMAKE_SOURCE_DIR}/src/main/jniLibs/${CMAKE_ANDRO

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

利用爬虫采集外卖数据进行竞争对手分析

目录 一、引言 二、准备工作 三、爬取数据 四、数据处理与存储 五、竞争对手分析 六、结论与展望 一、引言 在当今的数字化时代,数据已经成为企业成功的关键因素之一。对于餐饮外卖行业来说,数据的收集和分析尤为重要。通过对竞争对手的数据进行采…

【hacker送书第一期】嵌入式虚拟化技术与应用

第一期图书推荐 前言为什么嵌入式系统需要虚拟化技术?专家推荐本书适用群体内容简介目录权威作者团队参与方式 前言 随着物联网设备的爆炸式增长和万物互联应用的快速发展,虚拟化技术在嵌入式系统上受到了业界越来越多的关注、重视和实际应用。嵌入式系…

OpenMMlab导出yolov3的onnx模型并推理

手动导出 直接使用脚本 import torch from mmdet.apis import init_detector, inference_detectorconfig_file ./configs/yolo/yolov3_mobilenetv2_8xb24-ms-416-300e_coco.py checkpoint_file yolov3_mobilenetv2_mstrain-416_300e_coco_20210718_010823-f68a07b3.pth mod…

pyTorch Hub 系列#2:VGG 和 ResNet

一、说明 在上一篇教程中,我们了解了 Torch Hub 背后的本质及其概念。然后,我们使用 Torch Hub 的复杂性发布了我们的模型,并通过相同的方式访问它。但是,当我们的工作要求我们利用 Torch Hub 上提供的众多全能模型之一时,会发生什么? 在本教程中,我们将学习如何利用称为…

Django(三、数据的增删改查、Django生命周期流程图)

文章目录 一、 基于ORM进行的CURDuser_list:作为主页使用路由文件urls.py配置如下:add.html:用于新增用户的数据页add页面视图函数如下:edit.html:修改数据的页面那么来总结一下上序所操作所用到的内容。 导入已存在的表其方式有两…

深度学习笔记--基于C++手撕self attention机制

目录 1--self attention原理 2--C代码 3--拓展 3-1--mask self attention 3-2--cross attention 1--self attention原理 直观来讲,就是每个 token 的 Query 去和其它 token(包括自身)的 Key 进行 dot product(点积&#xff0…

Tektronix(泰克)示波器TBS1102B测试电压

对于 Tektronix TBS1102B 示波器来说,测试电压的步骤基本如下: 连接测量点: 将被测电路的测量点连接到示波器的输入通道。使用正确的探头并确保连接的极性正确。 选择通道: 选择示波器上的通道,你想要测量的电压可能连…

Python BeautifulSoup 库使用教程

文章目录 简介安装 BeautifulSoup 库BeautifulSoup 库的导入BeautifulSoup 库依赖的解析库创建 BeautifulSoup 对象CSS选择器1、通过标签名查找2、通过 CSS 的类名查找3、通过 Tag(标签) 的 id 查找4、通过 是否存在某个属性来查找5、通过 某个标签是否存在某个属性来查找 获取…

【python后端】- 初识Django框架

Django入门 😄生命不息,写作不止 🔥 继续踏上学习之路,学之分享笔记 👊 总有一天我也能像各位大佬一样 🌝分享学习心得,欢迎指正,大家一起学习成长! 文章目录 Django入门…

Vue3:自定义图标选择器(包含 SVG 图标封装)

文章目录 一、准备工作(在 Vue3 中使用 SVG)二、封装 SVG三、封装图标选择器四、Demo 效果预览: 一、准备工作(在 Vue3 中使用 SVG) 本文参考:https://blog.csdn.net/houtengyang/article/details/1290431…

Carla之语义分割及BoundingBox验证模型

参考: Carla系列——4.Cara模拟器添加语义分割相机(Semantic segmentation camera) Carla自动驾驶仿真五:opencv绘制运动车辆的boudingbox(代码详解) Carla官网Bounding Boxes Carla官网创建自定义语义标签…

数据结构-堆和二叉树

目录 1.树的概念及结构 1.1 树的相关概念 1.2 树的概念 1.3 树的表示 1.4 树在实际中的应用(表示文件系统的目录树结构) 2.二叉树的概念及结构 2.1 概念 2.2 特殊的二叉树 2.3 二叉树的存储 3.堆的概念及结构 4.堆的实现 初始化堆 堆的插入…

从0开始python学习-32.pytest.mark()

目录 1. 用户自定义标记 1.1 注册标记​编辑 1.2 给测试用例打标记​编辑 1.3 运行标记的测试用例 1.4 运行多个标记的测试用例 1.5 运行指定标记以外的所有测试用例 2. 内置标签 2.1 skip :无条件跳过(可使用在方法,类,模…

6可靠的局域网组建

前面聊的拓扑结构都比较简单,所以能用,但是未必可靠。为了可靠,我们需要做冗余,同时需要做一些其他的配置。 生成树协议STP 假设交换机按照上面的方案连,虽然可以提高网络可靠性,但是因为形成了环路&#…

基于粒子群算法优化概率神经网络PNN的分类预测 - 附代码

基于粒子群算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于粒子群算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于粒子群优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要:针对PNN神经网络…

layui 表格(table)合计 取整数

第一步 开启合计行 是否开启合计行区域 table.render({elem: #myTable, url: ../baidui/, page: true, cellMinWidth: 100,totalRow:true,cols: [[ //表头//{ type: checkbox },{ type: checkbox,totalRowText: "合计" },//合计行区域{ field: id, align: center,…

c语言:解决数组中数组缺少单个的元素的问题

题目:数组nums包含从0到n的所以整数,但其中缺了一个。请编写代码找出那个缺失的整数。O(n)时间内完成。 如,输入:【3,0,1】。 输出: 2 三种方法 : 方法1:排序&#xf…

递归和master公式 系统栈 + 计算时间复杂度

前置知识:无 1)从思想上理解递归:对于新手来说,递归去画调用图是非常重要的,有利于分析递归 2)从实际上理解递归:递归不是玄学,底层是利用系统栈来实现的 3)任何递归函…

Autosar UDS开发01(UDS诊断入门概念(UDSOnCan))

目录 回顾接触UDS的过程 UDS基本概念 UDS的作用 UDS的宏观认识 UDS的CAN通讯链路 UDS的报文种类 回顾接触UDS的过程 自21年毕业后,我一直干了2年的Autosar CAN通讯开发。 开发的主要内容简单概括就是:应用报文开发、网管报文开发、休眠唤醒开发&am…

职业迷茫,我该如何做好职业规划

案例25岁男,入职2月,感觉自己在混日子,怕能力没有提升,怕以后薪资也提不起来。完全不知道应该往哪个方向进修,感觉也没有自己特别喜欢的。感觉自己特别容易多想,想多年的以后一事无成的样子。 我觉得这个案…