如何将三方库集成到hap包中——通过IDE集成cmak构建方式的C/C++三方库

314 篇文章 2 订阅
249 篇文章 4 订阅

简介

cmake构建方式是开源三方库的主流构建方式。DevEco Studio目前以支持cmake的构建方式。本文将通过在IDE上适配cJSON三方库为例讲来解如何在IDE上集成cmake构建方式得三方库。

创建工程

在开发进行三方库适配以及napi接口开发前,我们需要创建一个三方库对应的工程,具体创建工程方法可以参照文档通过IDE开发一个Napi工程

IDE上适配三方库

原生库准备

下载代码

通过cJSON github网址,通过Code>>Download ZIP选项下载最新版本的源码包,并将其解压后放在IDE工程中的CPP目录下。

  • 下载cJSON v1.7.17版本的库:

  • 将库放在IDE工程:

加入编译构建

原生库源码准备完后,我们需要将库加入到工程的编译构建中。在工程目录CPP下的CMakeLists.txt文件中,通过add_subdirectory将cJSON加入到编译中,并通过target_link_libraries添加对cjson的链接,如下图:

到此,我们的三方库适配已经完成,可以通过IDE上的Run entry按钮进行编译及运行了。

为了能让大家更好的学习鸿蒙(HarmonyOS NEXT)开发技术,这边特意整理了《鸿蒙开发学习手册》(共计890页),希望对大家有所帮助:https://qr21.cn/FV7h05

《鸿蒙开发学习手册》:

如何快速入门:https://qr21.cn/FV7h05

  1. 基本概念
  2. 构建第一个ArkTS应用
  3. ……

开发基础知识:https://qr21.cn/FV7h05

  1. 应用基础知识
  2. 配置文件
  3. 应用数据管理
  4. 应用安全管理
  5. 应用隐私保护
  6. 三方应用调用管控机制
  7. 资源分类与访问
  8. 学习ArkTS语言
  9. ……

基于ArkTS 开发:https://qr21.cn/FV7h05

  1. Ability开发
  2. UI开发
  3. 公共事件与通知
  4. 窗口管理
  5. 媒体
  6. 安全
  7. 网络与链接
  8. 电话服务
  9. 数据管理
  10. 后台任务(Background Task)管理
  11. 设备管理
  12. 设备使用信息统计
  13. DFX
  14. 国际化开发
  15. 折叠屏系列
  16. ……

鸿蒙开发面试真题(含参考答案):https://qr18.cn/F781PH

鸿蒙开发面试大盘集篇(共计319页):https://qr18.cn/F781PH

1.项目开发必备面试题
2.性能优化方向
3.架构方向
4.鸿蒙开发系统底层方向
5.鸿蒙音视频开发方向
6.鸿蒙车载开发方向
7.鸿蒙南向开发方向

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Livox Hap激光雷达可以通过以下步骤来提取点云的角点特征: 1. 对原始点云进行滤波,去除无用的点云数据。 2. 利用体素格网法将点云数据离散化成三维网格,并计算每个网格内点云的密度。 3. 针对每个网格,计算其八个顶点的密度值之和,并将其作为该网格的权值。 4. 对所有网格按照权值进行排序,取前若干个网格作为候选角点。 5. 针对每个候选角点,通过计算其邻域内点云的协方差矩阵,求解其特征值和特征向量,进而确定该点的角度特征。 下面是一个简单的C++代码示例,用于提取Livox Hap激光雷达点云的角点特征: ``` pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>); pcl::PointCloud<pcl::PointXYZ>::Ptr filtered(new pcl::PointCloud<pcl::PointXYZ>); // Load point cloud data from file pcl::io::loadPCDFile<pcl::PointXYZ>("cloud.pcd", *cloud); // Filter point cloud data pcl::VoxelGrid<pcl::PointXYZ> vg; vg.setInputCloud(cloud); vg.setLeafSize(0.1f, 0.1f, 0.1f); vg.filter(*filtered); // Build octree structure pcl::octree::OctreePointCloudDensity<pcl::PointXYZ> octree(0.1f); octree.setInputCloud(filtered); octree.addPointsFromInputCloud(); // Extract corner features std::vector<pcl::PointXYZ> corners; pcl::octree::OctreePointCloudDensity<pcl::PointXYZ>::OctreeIterator leaf_iter(octree); pcl::PointXYZ search_point; double search_radius = 0.1; // Adjust this value to control corner detection sensitivity while(*++leaf_iter) { Eigen::Matrix3f cov; Eigen::Vector4f centroid; octree.getVoxelData(leaf_iter, cov); octree.getVoxelData(leaf_iter, centroid); Eigen::SelfAdjointEigenSolver<Eigen::Matrix3f> eig_solver(cov); Eigen::Vector3f eig_values = eig_solver.eigenvalues(); Eigen::Matrix3f eig_vectors = eig_solver.eigenvectors(); if (eig_values(2) < search_radius && eig_values(1) < search_radius && eig_values(0) < search_radius) { pcl::PointXYZ corner(centroid(0), centroid(1), centroid(2)); corners.push_back(corner); } } // Output corner features for (int i = 0; i < corners.size(); i++) { std::cout << "Corner " << i << ": (" << corners[i].x << ", " << corners[i].y << ", " << corners[i].z << ")" << std::endl; } ``` 这段代码使用了PCL来实现点云的滤波、体素格网法和特征计算等操作。需要注意的是,代码中的搜索半径和体素大小需要根据具体情况进行调整,以获得最佳的角点检测效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值