我参考以下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

1lycium_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/                         # 📁 安装目录

2HPKBUILD 文件

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下载到本地

Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐