蓝香蕉代码 |【鸿蒙电脑开发编译C/C++】

蓝香蕉代码 |【鸿蒙电脑开发编译C/C++】

lycium_plusplus介绍

项目地址

lycium++支持鸿蒙电脑使用

上次我们介绍了lycium++框架的扩展,最近针对在鸿蒙电脑上使用框架也进行下介绍

如何使用

解决了什么问题

lycium++框架支持在win/mac/linux上进行交叉编译,支持一件打包hnp文件,通过这些hnp作为组件与应用一起安装到鸿蒙电脑上,在HarmonyOS上使用该框架也成为了可能。本次我们将框架在鸿蒙电脑上进行了适配,通过交叉编译解决了在鸿蒙电脑上执行编译的工具最小集,并伴随DevBoxPython安装器DevNode-OHGitNext几个核心应用的上架,解决了在鸿蒙电脑中,通过命令行编译C/C++代码的核心问题。

环境介绍

  • 设备:我使用的MateBook Pro已经升级到6.0.0.115版本,建议升级到该版本以上
  • 代码管理工具GitNext,作为代码管理工具下载管理三方库等,下载后可在系统终端中使用(个人推荐),也可以使用界面管理
  • 编译工具链DevBox,包含了llvmclangautoconfbashcmakemakeninjahdchnpclim4等编译基础工具,安装后可在系统的终端中使用
  • Python环境Python安装器,包含了python3.12的运行时,下载后可在终端中执行python脚本
  • Java环境BiShengJDK8-OH \ BiShengJDK17-OH,用于提供Java虚拟机环境,这个在之前的文章编译获取鸿蒙版本JDK中也讲到过(我这里使用的是JDK17)

以上几个应用是必须要下载的,lycium++环境非常依赖这几个核心环境,GitNext下载后需要手动完成密钥设置,具体设置方式如下

git config --global user.name <yourname> git config --global user.email <youremail> ssh-keygen -t rsa -b 2048 -C <youremail> cat ~/.ssh/id_rsa.pub 

把拿到的公钥配置到代码仓托管平台中,如gitcode托管仓中,可以参考他的详细配置提示

在这里插入图片描述


其他几个应用在应用市场搜索即可,我使用的IDE主要是CodeArts

应用图片


应用市场:BiShengJDK17-OH
应用市场:DevBox
应用市场:Python安装器
应用市场:GitNext
CodeArts IDE 通过应用市场->我的->应用尝鲜 搜索CodeArts安装下载

在这里插入图片描述

修改介绍

本次修改了在鸿蒙电脑上运行的环境配置,主要修改如下:

  1. 增加了build_local.sh本机构建入口
  2. lycium/script/build_hpk.sh调整了在执行build_local.sh时,仅构建适配平台的架构,当前适配了HarmonyOS,因此在TARGET_HARMONYOS变量为华为鸿蒙电脑构建的标识,在执行arch选择时,仅执行arm64-v8a
  3. 由于大部分脚本编写都是基于bash的,为了保证兼容性,将sh脚本的解释器指定为#!/bin/env bash

HPKBUILD适配

在框架适配后,每个ports仓仅需要适配HPKBUILD脚本即可完成本地构建适配

  1. 在prepare阶段,判断TARGET_HARMONYOS变量,若为true,怎执行setHarmonyOSENV环境变量设置(该设置指定了CC/CXX等常用的构建命令)
  2. host/type/build通过BUILD_SYSTEM_CONFIG变量指定为aarch64-linux,欺骗config类架构判断方式
  3. 其他保持不变

bash为例子ohos-bash

判断当TARGET_HARMONYOS为true时,设置本机构建环境变量setHarmonyOSENV


判断当TARGET_HARMONYOStrue时,设置本机构建环境变量setHarmonyOSENV

下载框架

安装配置好git后,可以在终端中通过执行以下命令下载框架

git clone https://gitcode.com/OpenHarmonyPCDeveloper/lycium_plusplus 

构建

框架代码下载好后,按照以下方式执行构建,注意构建过程中注意弹窗,不要功亏一篑

cd lyium ./build_local.sh bash 
在这里插入图片描述

过程中出现弹窗,点击确认才可以继续:鸿蒙电脑当前已经允许外来二进制执行了,我们提供的clang已经支持了编译后自动签名的能力,因此在脚本执行构建过程中,产生新的二进制且被脚本或编译框架调度执行,需要我们主动确认后才能继续(若需要单独签名,下一次单独介绍下)

在这里插入图片描述

构建结果在本机构建时均除了与交叉编译的结果同样的路径外,在lycium/uer/local下会安装所有通过脚本编译的命令,可以设置环境变量将这些命令加入到终端中,便于后续执行;该路径默认为工程下的lycium/uer/local,也可以通过设置INSTALL_LOCAL_PERFIX环境变量后执行构建以指定到您想安装的目录。

在这里插入图片描述


本地编译好的命令,可以直接./执行,首次执行时仍然要点击运行

在这里插入图片描述


超期未点击,会报operation not permitted

在这里插入图片描述


首次尝试可以执行./build_local.sh tree体验尝试

其他

构建结果、产物等,与交叉编译无异,经过该框架编译的二进制,在鸿蒙电脑上可以直接执行(需要我们自己确认弹窗)

下次单独介绍下如何把其他人编译好的二进制,在鸿蒙电脑上签名执行

附录

几个相关的代码仓
tree
bash
lycium_plusplus
muslc_gext

应用及环境相关工具开源应用
GitNext
BiShengJDKInstaller
bishengjdk-8
bishengjdk-17
DevPython-OH
DevBox
DevNode-OH

Read more

《算法题讲解指南:优选算法-分治-归并》--47.归并排序,48.数组中的逆序对

《算法题讲解指南:优选算法-分治-归并》--47.归并排序,48.数组中的逆序对

🔥小叶-duck:个人主页 ❄️个人专栏:《Data-Structure-Learning》 《C++入门到进阶&自我学习过程记录》《算法题讲解指南》--优选算法 ✨未择之路,不须回头 已择之路,纵是荆棘遍野,亦作花海遨游 目录 47.归并排序 题目链接: 题目描述: 题目示例: 解法(归并排序): 算法思路: C++算法代码: 算法总结及流程解析: 48.数组中的逆序对 题目链接: 题目描述: 题目示例: 解法(利用归并排序的过程——分治): 算法思路: C++算法代码: 算法总结及流程解析: 结束语 47.归并排序 题目链接: 215. 数组912. 排序数组 - 力扣(LeetCode)215.

By Ne0inhk
Flutter for OpenHarmony: Flutter 三方库 path_to_regexp 揭秘路由匹配与参数提取的核心算法(路由管道工程师)

Flutter for OpenHarmony: Flutter 三方库 path_to_regexp 揭秘路由匹配与参数提取的核心算法(路由管道工程师)

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net 前言 在进行 OpenHarmony 的应用架构设计时,我们经常需要处理“动态路由”。 * 页面路径模式:/profile/:userId * 实际跳转路径:/profile/9527 如何在众多的路由规则中,快速匹配到正确的页面,并精准提取出其中的动态参数 userId = 9527?这背后的核心驱动力,正是 path_to_regexp。它是 go_router、auto_route 等几乎所有顶级路由框架共享的底层逻辑库。 一、路由解析链路模型 该库将人类易读的路径模式,转化为机器可高效执行的正规表达式。 路径模式 ('/user/:id') path_to_regexp 编译器 高性能 RegExp (正则) 路径匹配

By Ne0inhk
从零开始打造高性能数据结构——手把手教你实现环形缓冲

从零开始打造高性能数据结构——手把手教你实现环形缓冲

◆ 博主名称: 小此方-ZEEKLOG博客 大家好,欢迎来到小此方的博客。 ⭐️个人专栏:《C语言》_小此方的博客-ZEEKLOG博客 算法_小此方的博客-ZEEKLOG博客  ⭐️踏破千山志未空,拨开云雾见晴虹。 人生何必叹萧瑟,心在凌霄第一峰。 目录 一,普通队列的劣势 1. 空间浪费严重(“假溢出”问题) 2. 需要频繁移动元素(若避免浪费) 3. 扩容成本高 4. 无法解决“假溢出”导致的提前扩容 二,环形缓冲结构分析  1. “循环”取模实现指针回绕  2.“循环”,轮流入座而不是排长队 三,实现环形缓冲 1,MyCircularQueue(k): 构造器   1,结构体搭建   2,初始化 3,为什么选择k+1块空间而不是k块空间?

By Ne0inhk
量子力学数学基础入门:从态矢到内积外积(附Python演示)

量子力学数学基础入门:从态矢到内积外积(附Python演示)

📐 形象比喻之后,用数学精确描述量子世界 在上一篇文章中,我们用“拆掉楼梯的大楼”“同时存在于所有楼层的人”等比喻,直观地理解了量子化、叠加、测量等核心概念。但真正要进入量子计算的大门,必须掌握量子力学的数学语言——狄拉克符号和线性代数。 本文作为姊妹篇,将用数学方式重新表述量子力学的基础概念,并辅以Python代码(NumPy)演示,让你亲手计算态矢、内积、外积,感受数学公式背后的物理意义。 一、为什么要用数学描述量子力学? 形象比喻虽然易懂,但无法精确计算。例如: * 叠加态中的“权重”具体是多少? * 测量得到某个结果的概率如何计算? * 两个量子态是相同还是正交? 这些问题的答案都隐藏在数学结构中。量子力学的数学框架是希尔伯特空间中的线性代数,所有物理过程都可以转化为向量和矩阵的运算。一旦掌握这套语言,你就能理解量子门、量子算法,甚至动手模拟量子电路。 二、态矢:量子态的数学化身 1. 右矢(ket) ∣ ψ ⟩ |\psi\rangle ∣ψ⟩ 在量子力学中,

By Ne0inhk