鸿蒙next开发:make 交叉编译

make 是一个标准的 Unix 构建工具,用于自动化编译过程。它读取 Makefile 中的规则和依赖项并根据这些规则来构建源代码。make 会检查源代码文件的时间戳,以确定哪些文件需要重新编译。它会自动解决依赖关系并按正确的顺序编译源文件。通过在终端中运行 make 命令,make 将根据 Makefile 中的指令逐步构建代码,生成最终的可执行程序或库文件。

直接通过make方式构建的三方库,其原库的Makefie文件已固定,因此如果需要交叉编译此类三方库,需要先分析原库的Makefile文件,查看其编译工具的具体配置方式。

本文通过bzip2三方库来分享如何通过OpenHarmony SDK在linux环境来交叉编译make构建方式的三方库。

编译前准备

OHOS SDK准备

  1. 从 openHarmony SDK 官方发布渠道 下载SDK

  2. 解压SDK

    owner@ubuntu:~/workspace$ tar -zxvf version-Master_Version-OpenHarmony_3.2.10.3-20230105_163913-ohos-sdk-full.tar.gz
  3. 进入到sdk的linux目录,解压工具(C/C++三方库主要使用到native工具)

    owner@ubuntu:~/workspace$ cd ohos_sdk/linux
    owner@ubuntu:~/workspace/ohos-sdk/linux$ for i in *.zip;do unzip ${i};done
    owner@ubuntu:~/workspace/ohos-sdk/linux$ ls
    ets                                native                                   toolchains
    ets-linux-x64-4.0.1.2-Canary1.zip  native-linux-x64-4.0.1.2-Canary1.zip     toolchains-linux-x64-4.0.1.2-Canary1.zip
    js                                 previewer
    js-linux-x64-4.0.1.2-Canary1.zip   previewer-linux-x64-4.0.1.2-Canary1.zip

三方库源码准备

  1. 下载三方库代码:

    下载bzip2 v1.0.6版本的源码包

    owner@ubuntu:~/workspace$ wget https://sourceforge.net/projects/bzip2/files/bzip2-1.0.6.tar.gz      ## 下载指定版本的源码包
  2. 解压源码包

    owner@ubuntu:~/workspace$ tar -zxf bzip2-1.0.6.tar.gz                     ## 解压源码包
    owner@ubuntu:~/workspace$
    owner@ubuntu:~/workspace$ cd bzip2-1.0.6/                                # 进入到bzip2源码目录
    owner@ubuntu:~/workspace/bzip2-1.0.6$

编译&安装

  1. 分析Makefile文件

    通过分析原库的Makefile文件可知其以下几个内容需要进行重新配置

    1. 编译命令配置
    # To assist in cross-compiling
    CC=gcc
    AR=ar
    RANLIB=ranlib
    LDFLAGS=

    默认配置linux下gcc的编译命令,编译时我们需要配置成OpenHarmony交叉编译命令即可。

    1. 安装路径配置
    # Where you want it installed when you do 'make install'
    PREFIX=/usr/local

    默认配置的安装目录为系统的/usr/local/下,如果需要执行安装的话,需配置成用户目录下。

  2. 配置交叉编译命令,执行交叉编译

    分析完Makefile后即可配置交叉编译命令进行编译

    owner@ubuntu:~/workspace/bzip2-1.0.6$ make CC="/home/owner/workspace/ohos-sdk/linux/native/llvm/bin/clang --target=aarch64-linux-ohos" AR=/home/owner/workspace/ohos-sdk/linux/native/llvm/bin/llvm-ar RANDLIB=/home/owner/workspace/ohos-sdk/linux/native/llvm/bin/llvm-ranlib -j4 libbz2.a bzip2 bzip2recover
    /home/owner/workspace/ohos-sdk/linux/native/llvm/bin/clang --target=aarch64-linux-ohos -Wall -Winline -O2 -g -D_FILE_OFFSET_BITS=64 -c huffman.c
    /home/owner/workspace/ohos-sdk/linux/native/llvm/bin/clang --target=aarch64-linux-ohos -Wall -Winline -O2 -g -D_FILE_OFFSET_BITS=64 -c crctable.c
    ...
    删除大量make信息
    ...
    /home/owner/workspace/ohos-sdk/linux/native/llvm/bin/llvm-ar cq libbz2.a blocksort.o huffman.o crctable.o randtable.o compress.o decompress.o bzlib.o
    ranlib libbz2.a
    1 warning generated.
    /home/owner/workspace/ohos-sdk/linux/native/llvm/bin/clang --target=aarch64-linux-ohos -Wall -Winline -O2 -g -D_FILE_OFFSET_BITS=64  -o bzip2 bzip2.o -L. -lbz2
    owner@ubuntu:~/workspace/bzip2-1.0.6$ 

    特别说明:CC配置除了配置交叉编译的clang外,还需要配置target的架构,即配置成aarch64位,按此配置编译出来的文件才能在64位设备上运行,如若需要编译32位的文件,则target配置成arm-linux-ohos即可

  3. 查看编译成功后的文件

    owner@ubuntu:~/workspace/bzip2-1.0.6$ file bzip2             # 使用file查看生成的文件属性
    bzip2: ELF 64-bit LSB shared object, ARM aarch64, version 1 (SYSV), dynamically linked, interpreter /lib/ld-musl-aarch64.so.1, with debug_info, not stripped
    owner@ubuntu:~/workspace/bzip2-1.0.6$

    编译时配置了aarch64-linux-ohos,故生成的文件属性为ARM aarch64,交叉编译成功。

  4. 执行安装

    通过之前分析Makefile知道,在安装时需要配置PREFIX这个安装路径的变量:

    owner@ubuntu:~/workspace/bzip2-1.0.6$ make install PREFIX=/home/owner/workspace/usr/bzip2/       # 执行make install安装
    owner@ubuntu:~/workspace/bzip2-1.0.6$
    owner@ubuntu:~/workspace/bzip2-1.0.6$ ls /home/owner/workspace/usr/bzip2/                        # 查看安装文件
    bin  include  lib  man
    owner@ubuntu:~/workspace/bzip2-1.0.6$

测试

交叉编译完后,该测试验证我们的三方库。为了保证原生库功能完整,我们基于原生库的测试用例进行测试验证。为此,我们需要集成了一套可以在OH环境上进行cmake, ctest等操作的环境,具体请阅读 lycium CItools

  1. 测试环境配置,请参考 lycium CItools

  2. 准备测试资源

    使用原生库的测试用例进行测试,我们为了保证测试时不进行编译操作,我们需要把整个编译的源码作为测试资源包通过hdc工具推送到开发板,且需要保证三方库在开发板的路径与编译时路径一致:

    owner@ubuntu:~/workspace$ tar -zcvf bzip2.tar.gz bzip2-1.0.6/
    hdc_std file send X:\workspace\bzip2.tar.gz /data/      ## 推送资源到开发板
    hdc_std shell                                           ## 进入开发板系统
    # mkdir -p /home/owner/                                 ## 设置与编译时同样的路径
    # cd /home/owner/
    # ln -s workspace /data/                                ## 系统根目录空间有限,建议通过软链接配置路径
    # cd workspace
    # tar -zxf bzip2.tar.gz                                 ## 解压测试资源
  3. 执行测试

    hdc_std shell
    # cd /home/owner/worspace/bzip2-1.0.6
    # make check                                          ## 执行测试命令,以下为测试信息
    Doing 6 tests (3 compress, 3 uncompress) ...
    If there's a problem, things might stop at this point.
    
    ./bzip2 -1  < sample1.ref > sample1.rb2
    ./bzip2 -2  < sample2.ref > sample2.rb2
    ./bzip2 -3  < sample3.ref > sample3.rb2
    ./bzip2 -d  < sample1.bz2 > sample1.tst
    ./bzip2 -d  < sample2.bz2 > sample2.tst
    ./bzip2 -ds < sample3.bz2 > sample3.tst
    cmp sample1.bz2 sample1.rb2
    cmp sample2.bz2 sample2.rb2
    cmp sample3.bz2 sample3.rb2
    cmp sample1.tst sample1.ref
    cmp sample2.tst sample2.ref
    cmp sample3.tst sample3.ref
    ...
    
    # echo $?                                            ## 查看测试结果
    0

bzip2执行了6条测试用例,且未提示任何错误,说明此库测试成功。当不确定此库是否测试成功时,我们还可以在执行完测试命令后在命令行手动查看测试结果,通过输入 echo $?,如命令行输出0表示测试成功,非0代表测试失败。

最后

有很多小伙伴不知道学习哪些鸿蒙开发技术?不知道需要重点掌握哪些鸿蒙应用开发知识点?而且学习时频繁踩坑,最终浪费大量时间。所以有一份实用的鸿蒙(HarmonyOS NEXT)资料用来跟着学习是非常有必要的。 

这份鸿蒙(HarmonyOS NEXT)资料包含了鸿蒙开发必掌握的核心知识要点,内容包含了ArkTS、ArkUI开发组件、Stage模型、多端部署、分布式应用开发、音频、视频、WebGL、OpenHarmony多媒体技术、Napi组件、OpenHarmony内核、Harmony南向开发、鸿蒙项目实战等等)鸿蒙(HarmonyOS NEXT)技术知识点。

希望这一份鸿蒙学习资料能够给大家带来帮助,有需要的小伙伴自行领取,限时开源,先到先得~无套路领取!!

如果你是一名有经验的资深Android移动开发、Java开发、前端开发、对鸿蒙感兴趣以及转行人员,可以直接领取这份资料

 获取这份完整版高清学习路线,请点击→纯血版全套鸿蒙HarmonyOS学习资料

鸿蒙(HarmonyOS NEXT)最新学习路线

  •  HarmonOS基础技能

  • HarmonOS就业必备技能 
  •  HarmonOS多媒体技术

  • 鸿蒙NaPi组件进阶

  • HarmonOS高级技能

  • 初识HarmonOS内核 
  • 实战就业级设备开发

 有了路线图,怎么能没有学习资料呢,小编也准备了一份联合鸿蒙官方发布笔记整理收纳的一套系统性的鸿蒙(OpenHarmony )学习手册(共计1236页)鸿蒙(OpenHarmony )开发入门教学视频,内容包含:ArkTS、ArkUI、Web开发、应用模型、资源分类…等知识点。

获取以上完整版高清学习路线,请点击→纯血版全套鸿蒙HarmonyOS学习资料

《鸿蒙 (OpenHarmony)开发入门教学视频》

《鸿蒙生态应用开发V2.0白皮书》

图片

《鸿蒙 (OpenHarmony)开发基础到实战手册》

OpenHarmony北向、南向开发环境搭建

图片

 《鸿蒙开发基础》

  • ArkTS语言
  • 安装DevEco Studio
  • 运用你的第一个ArkTS应用
  • ArkUI声明式UI开发
  • .……

图片

 《鸿蒙开发进阶》

  • Stage模型入门
  • 网络管理
  • 数据管理
  • 电话服务
  • 分布式应用开发
  • 通知与窗口管理
  • 多媒体技术
  • 安全技能
  • 任务管理
  • WebGL
  • 国际化开发
  • 应用测试
  • DFX面向未来设计
  • 鸿蒙系统移植和裁剪定制
  • ……

图片

《鸿蒙进阶实战》

  • ArkTS实践
  • UIAbility应用
  • 网络案例
  • ……

图片

 获取以上完整鸿蒙HarmonyOS学习资料,请点击→纯血版全套鸿蒙HarmonyOS学习资料

总结

总的来说,华为鸿蒙不再兼容安卓,对中年程序员来说是一个挑战,也是一个机会。只有积极应对变化,不断学习和提升自己,他们才能在这个变革的时代中立于不败之地。 

  • 10
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Qt是一个跨平台的应用程序开发框架,可以用于开发图形界面和嵌入式应用程序。交叉编译是指在一台主机上编译适用于另一种不同架构的目标平台的程序。在这里,我们将介绍如何使用Qt进行ARM64架构的交叉编译。 首先,你需要准备以下工具和环境: 1. Qt开发环境:确保你已经安装了Qt的开发环境,包括Qt Creator和Qt库。 2. ARM64交叉编译工具链:你需要下载并安装适用于ARM64架构的交叉编译工具链。这个工具链包括了ARM64架构的编译器、链接器等工具。 3. 目标设备的SDK:如果你的目标设备有提供SDK,你需要下载并安装该SDK,以获取目标设备的头文件和库文件。 接下来,你可以按照以下步骤进行Qt的ARM64交叉编译: 1. 打开Qt Creator,并创建一个新的Qt项目。 2. 在项目设置中,选择“Kits”选项卡,并点击“Add”按钮添加一个新的Kit。 3. 在弹出的对话框中,选择“GCC”编译器,并点击“Next”按钮。 4. 在“Device type”下拉菜单中选择“Generic Linux Device”。 5. 在“Device”下拉菜单中选择“Generic Linux Device”。 6. 在“Sysroot”字段中,填入你的交叉编译工具链的sysroot路径。 7. 在“Compiler path”字段中,填入你的交叉编译工具链的编译器路径。 8. 在“Qt version”字段中,选择你安装的Qt版本。 9. 点击“Finish”按钮完成Kit的设置。 10. 在项目设置中,选择“Build & Run”选项卡,并选择刚刚创建的Kit作为默认的构建套件。 11. 点击“Build”按钮进行编译。 完成以上步骤后,你就可以使用Qt进行ARM64架构的交叉编译了。记得在编写代码时,使用适用于ARM64架构的头文件和库文件。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值