【HarmonyOS PC三方库适配】NanoVG C++库交叉编译及应用实战,从安装开始的全过程教学
我参考以下3个链接完成鸿蒙PC C++三方库NanoVG库交叉编译及应用:
(1)https://blog.csdn.net/zl392321162/article/details/159284760
(2)https://blog.csdn.net/weixin_62765017/article/details/161294114
(3)https://weishuo.blog.csdn.net/article/details/161196629?spm=1011.2415.3001.5331
第一步先下载并安装开源虚拟机VirtualBox VirtualBox下载网址:https://www.virtualbox.org
创建Linux虚拟机:|点击新建按钮创建 |名称可以自己取 |文件夹建议放到空间大的盘 |类型Linux |
版本Ubuntu (64-bit)
如果后面进入Ubuntu虚拟机有黑屏,闪退等问题,可以尝试升高创建虚拟机的内存和内核数,虚拟硬盘大小最好在25GB以上
设置虚拟硬盘 l 选择创建虚拟硬盘 l 文件类型选择VDI l 可将大小设为建议大小
Ubuntu下载网址:https://ubuntu.com/download
进入页面后点击Download,选择尽量高的版本,下载完成后有个以iso后缀结尾的文件
按图中所 示步骤将Ubuntu安装文件放 入虚拟机的虚拟光盘中点击“启动”
第二步远程访问Linux
远程访问通常基于ssh协议,我们需要在系统中 先安装ssh服务器: l 输入用户名密码进入系统 l 点击界面上左上角“Activities” l 在“Type to search”的搜索框中,输入 “Terminal” l 打开终端输入”sudoapt install openssh server”后回车 l 输入登录密码 l 出现“Do you want to continue? [Y/n]”后输入 “Y
设置网络端口映射:“设置”-》“网络”-》“网卡1”“ 高级”-》“端口转发”

远程访问所需软件: putty(用于终端访问) WinSCP(用于文件传输)这是两个很重要的软件
putty下载与链接: l 打开网址:https://putty.org/ l 点击“You can download PuTTY here ”链接 l 点击“Alternative binary files”中putty.exe对应 的64-bit的putty.exe进行下载|打开下载好的putty文件 Host Name中输入: 127.0.0.1 点击Open 输入用户名密码即可
WinSCP安装与链接: l 网址:https://winscp.net/eng/index.php l 点击页面中的DOWNLOAD NOW下载 l 下载安装完毕后打开 l 在主界面输入主机名“127.0.0.1”以及用户名和 密码打开后便可进行文件传输
Ubuntu 中搭建鸿蒙 PC 三方库交叉编译构建开发环境
安装 gcc、cmake、git 等基础编译工具
执行linux命令:sudo -i 切换到root权限。
lycium 支持多种构建方式的三方库。为保证能正常编译,请先安装以下常用构建工具:
1. sudo apt-get install gcc g++;
2. sudo apt-get install cmake;
3. sudo apt-get install make;
4. sudo apt-get install pkg-config;
5. sudo apt-get install autoconf;
6. sudo apt-get install autoreconf;
7. sudo apt-get install automake;
8. sudo apt-get install git git-lfs
下载 OHOS SDK 压缩包
为方便管理,下文默认将所有内容放在 /home/ohpkg(可自定义,记得同步改环境变量)。执行下面命令创建目录并下载 SDK 压缩包。
1. cd /home
2. mkdir ohpkg
3. cd ohpkg
4. wget https://repo.huaweicloud.com/openharmony/os/6.0-Release/ohos-sdk-windows_linux-public.tar.gz
解压 SDK,并解压 native 工具链
执行下面命令,解压OHOS SDK。
1. cd /home/ohpkg
2. tar -zxf ohos-sdk-windows_linux-public.tar.gz
3. tree -L 2
交叉编译主要使用 native 工具链,还需解压 linux 目录下的 native-linux-x64-*.zip
1. cd /home/ohpkg/linux
2. unzip -q native-linux-x64-6.0.0.47-Beta1.zip
3. tree -L 2
lycium 做 C/C++ 三方库交叉编译时,OHOS_SDK 应指向 native 的父目录(即包含 native 的那一层,示例中为 linux 目录)。
1. vim ~/.bashrc
2.
3. # 在文件末尾添加(路径改成你的实际解压目录)
4. export OHOS_SDK=/home/ohpkg/linux
5.
6. # 保存退出后执行
7. source ~/.bashrc
配置 hnpcli,解压工具链并设置 HNP_TOOL。
1. cd /home/ohpkg/linux
2. unzip -q toolchains-linux-x64-6.0.0.47-Beta1.zip
3. vim ~/.bashrc
4.
5. # 在最后一行添加(路径按实际解压位置修改)
6. export HNP_TOOL=/home/ohpkg/linux/toolchains/hnpcli
7.
8. source ~/.bashrc
克隆 lycium++,了解目录与 HPKBUILD
在 /home目录执行以下命令:
1. git clone https://gitcode.com/OpenHarmonyPCDeveloper/lycium_plusplus.git
(1)lycium_plusplus目录结构
1. lycium_plusplus/
2. ├── LICENSE # 📜 项目许可证
3. ├── README.md # 📖 项目说明文档
4. ├── openharmony_tpc_c_cplusplus_LICENSE # 📜 OpenHarmony TPC 许可证
5. ├── community/ # 👥 社区主导的构建库(隐式依赖)
6. ├── external_deps/ # 🔌 外部适配仓
7. │ ├── module.json # ⚙️ 外部依赖配置文件
8. │ ├── muslc_gext/ # 🔧 muslc 扩展库
9. │ └── tree/ # 🌳 tree 工具的适配
10. ├── thirdparty/ # 📚 三方库目录(显式构建)
11. └── lycium/ # 🏗️ lycium 编译框架核心
12. ├── build.sh # 🚀 主构建脚本
13. ├── build_local.sh # 💻 本机构建脚本
14. ├── script/ # 📜 构建脚本集合
15. │ ├── build_hpk.sh # 📦 HPK 构建脚本
16. │ ├── envset.sh # 🔧 环境变量设置脚本
17. │ └── load_outer_parts.py # 📥 外部依赖加载脚本
18. ├── template/ # 📋 HPKBUILD 模板
19. ├── output/ # 📤 编译产物输出目录
20. └── usr/ # 📁 安装目录
(2)HPKBUILD 文件
HPKBUILD 是核心配置,描述三方库如何下载、编译、安装:
1. pkgname=NAME # 📦 库名
2. pkgver=VERSION # 🏷️ 库版本
3. pkgrel=0 # 🔢 发布号
4. pkgdesc="" # 📄 库描述
5. url="" # 🔗 官网链接
6. archs=("armeabi-v7a" "arm64-v8a") # 💻 CPU 架构
7. license=() # ⚖️ 许可证
8. depends=() # 🔗 依赖库的目录名
9. makedepends=() # 🛠️ 构建依赖工具
10. source="" # 📥 源码下载链接
11.
12. downloadpackage=true # 📥 是否自动下载压缩包
13. autounpack=true # 📦 是否自动解压
14. buildtools= # 🔨 编译方法(cmake/configure/make)
以官方适配完成的 cups 三方库交叉编译验证环境
(1)安装ninja
执行以下命令,安装ninja。
1. sudo apt install ninja-build
(2)检查并修正C 预处理器配置
执行以下命令,将CPP配置改成红框中所示。
1. cd /home/lycium_plusplus/lycium /script
2. vim envset.sh

(3)进入 lycium 目录并构建
执行以下命令,编译cups三方库。出现红框中的2行代码,则编译成功。
1. source envset.sh
2. cd /home/lycium_plusplus/lycium
3. ./build.sh cups

(3)检查编译结果
检查目录:/home/lycium_plusplus/lycium/usr/cups 下是否包含 armeabi-v7a、arm64-v8a 等架构 产物。执行如下命令,若出现图片中的架构产物,则编译成功。
1. cd usr/cups/
2. tree -L 2

NanoVG 简介
[NanoVG](https://github.com/memononen/nanovg) 是一个轻量级、单头文件的2D矢量图形渲染库,主要特点:
可以用WinSCP,通过将NanoVG源码下载到电脑,WinSCP上传到服务器
项目目标
将 NanoVG 库交叉编译为 HarmonyOS PC 可用的静态库,并通过 NAPI 适配封装,集成到 ArkTS 应用中实现小车控制的状态可视化。
NanoVG 三方库交叉编译打包
获取 NanoVG 源码
创建 NanoVG 构建目录
mkdir -p /home/lycium_plusplus/thirdparty/nanovg
cd /home/lycium_plusplus/thirdparty/nanovg
克隆 NanoVG 源码
git clone https://github.com/memononen/nanovg.git nanovg-src
查看源码结构
cd nanovg-src
tree -L 1
# nanovg.h # 头文件
# nanovg.c # 实现文件(可选)
# nanovg_gl.h # OpenGL 后端头文件
# example/ # 示例代码
创建 NanoVG 的 HPKBUILD 文件
lycium_plusplus/thirdparty/nanovg 目录下创建 HPKBUILD文件:
创建 HPKBUILD 文件
vim /home/lycium_plusplus/thirdparty/nanovg/HPKBUILD
HPKBUILD 文件内容:
pkgname=nanovg
pkgver=1.0
pkgrel=0
pkgdesc="A small ANTIGRAIN-like 2D vector graphics rendering library"
url="https://github.com/memononen/nanovg"
archs=("armeabi-v7a" "arm64-v8a" "x86_64")
license=("zlib")
depends=("libEGL" "libGLESv2")
makedepends=("cmake" "make")
source=""
buildtools=make
downloadpackage=false
autounpack=false
prepare() {
mkdir -p $PKGBUILD/temp/$pkgname-$pkgver
cd $PKGBUILD/temp/$pkgname-$pkgver
cp -r $PKGBUILD/../nanovg-src/* .
}
# build 函数:执行编译
build() {
cd $PKGBUILD/temp/$pkgname-$pkgver
# NanoVG 是单文件库,需要创建一个简单的 C 文件
# 使用 nanovg.h 作为实现
cat > nanovg.c << 'EOF'
#define NANOVG_GLES2_IMPLEMENTATION
#include "nanovg.h"
#include "nanovg_gl.h"
EOF
# 编译参数
CFLAGS="${CFLAGS} -fPIC -O2"
LDFLAGS="${LDFLAGS}"
# 编译为静态库
${CC} ${CFLAGS} -c nanovg.c -o nanovg.o
${AR} rcs libnanovg.a nanovg.o
${RANLIB} libnanovg.a
}
# package 函数:安装产物
package() {
cd $PKGBUILD/temp/$pkgname-$pkgver
# 创建安装目录结构
mkdir -p $PKG/$pkgname/{$archs}/lib
mkdir -p $PKG/$pkgname/{$archs}/include
# 安装静态库
install -m 644 libnanovg.a $PKG/$pkgname/{$archs}/lib/
# 安装头文件
install -m 644 nanovg.h $PKG/$pkgname/{$archs}/include/
install -m 644 nanovg_gl.h $PKG/$pkgname/{$archs}/include/
}
# cleanbuild 函数:清理构建
cleanbuild() {
rm -rf $PKGBUILD/temp/$pkgname-$pkgver
rm -rf $PKGBUILD/temp/$pkgname-$pkgver.tar.gz
}
```
执行 NanoVG 交叉编译
# 1. 进入 lycium 目录
cd /home/lycium_plusplus/lycium
# 2. 设置环境变量
source script/envset.sh
# 3. 编译 NanoVG(仅编译 arm64-v8a 架构)
./build.sh nanovg
如果需要编译所有支持的架构
./build.sh nanovg --arch=all
```
验证编译产物
查看 NanoVG 编译产物
cd /home/lycium_plusplus/lycium/usr/nanovg
查看目录结构
tree -L 3
# 预期输出:
# nanovg/
# ├── arm64-v8a/
# │ ├── lib/
# │ │ └── libnanovg.a
# │ └── include/
# │ ├── nanovg.h
# │ └── nanovg_gl.h
# └── armeabi-v7a/
# ├── lib/
# │ └── libnanovg.a
# └── include/
# ├── nanovg.h
# └── nanovg_gl.h
检查库文件信息
file arm64-v8a/lib/libnanovg.a
# 输出: ELF 64-bit LSB relocatable, ARM aarch64, ...
查看导出符号
llvm-nm arm64-v8a/lib/libnanovg.a | grep nvgCreate
# 应该能看到:
# nvgCreateGLES2
# nvgDeleteGLES2
查看库中函数数量
llvm-nm arm64-v8a/lib/libnanovg.a | grep ' T ' | wc -l
# 输出: 约 47(NanoVG 公开函数数量)
```
打包 NanoVG 库
# 1. 创建发布包
cd /home/lycium_plusplus/lycium/usr
tar czf nanovg-ohos.tar.gz nanovg/
# 2. 验证包内容
tar tzf nanovg-ohos.tar.gz
# 输出类似:
# nanovg/arm64-v8a/lib/libnanovg.a
# nanovg/arm64-v8a/include/nanovg.h
可以用WinSCP下载到本地
更多推荐



所有评论(0)