当前位置:   article > 正文

鸿蒙next开发:configure 交叉编译_鸿蒙next编译

鸿蒙next编译

configure 是一个由 GNU Autoconf 提供的脚本用于自动生成 Makefile。Autoconf 是一个用于创建可移植的源代码包的工具,它可以检测系统的特性和能力并生成适合当前系统的配置文件。
在使用 configure 进行编译时,首先运行 configure 脚本,它会根据当前系统的特性和用户指定的选项生成一个或多个 Makefile。这些 Makefile 包含了编译该软件所需的详细规则和指令。
本文通过jpeg库来展示如何将一个configure构建方式的三方库在linux环境上通过OpenHarmony SDK进行交叉编译

编译前准备

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工具)

    1. owner@ubuntu:~/workspace$ cd ohos_sdk/linux
    2. owner@ubuntu:~/workspace/ohos-sdk/linux$ for i in *.zip;do unzip ${i};done
    3. owner@ubuntu:~/workspace/ohos-sdk/linux$ ls
    4. ets native toolchains
    5. 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
    6. js previewer
    7. js-linux-x64-4.0.1.2-Canary1.zip previewer-linux-x64-4.0.1.2-Canary1.zip

三方库源码准备

  1. 下载三方库代码:

    owner@ubuntu:~/workspace$ wget http://www.ijg.org/files/jpegsrc.v9e.tar.gz       ## 下载指定版本的源码包
  2. 解压源码包

    owner@ubuntu:~/workspace$ tar -zxvf jpegsrc.v9e.tar.gz                           ## 解压源码包

编译 & 安装

  1. 查看configure配置

    进入到jpeg目录执行configure配置,如若对configure配置项不熟悉,我们可以通过运行configure --help查看:

    1. owner@ubuntu:~/workspace/jpeg-9e$ ./configure --help
    2. `configure` configures libjpeg 9.5.0 to adapt to many kinds of systems.
    3. Usage: ./configure [OPTION]... [VAR=VALUE]...
    4. ...
    5. # 去除大量不必要信息
    6. ...
    7. # 配置安装选项
    8. Installation directories:
    9. --prefix=PREFIX install architecture-independent files in PREFIX
    10. [/usr/local]
    11. ...
    12. # 去除大量不必要信息
    13. ...
    14. # 配置编译的主机选项(--host),默认配置为linux
    15. System types:
    16. --build=BUILD configure for building on BUILD [guessed]
    17. --host=HOST cross-compile to build programs to run on HOST [BUILD]
    18. --target=TARGET configure for building compilers for TARGET [HOST]
    19. # cJSON库配置可选项
    20. Optional Features:
    21. --disable-option-checking ignore unrecognized --enable/--with options
    22. --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
    23. --enable-FEATURE[=ARG] include FEATURE [ARG=yes]
    24. --enable-silent-rules less verbose build output (undo: "make V=1")
    25. --disable-silent-rules verbose build output (undo: "make V=0")
    26. --enable-maintainer-mode
    27. enable make rules and dependencies not useful (and
    28. sometimes confusing) to the casual installer
    29. --enable-dependency-tracking
    30. do not reject slow dependency extractors
    31. --disable-dependency-tracking
    32. speeds up one-time build
    33. --enable-ld-version-script
    34. enable linker version script (default is enabled
    35. when possible)
    36. --enable-shared[=PKGS] build shared libraries [default=yes]
    37. --enable-static[=PKGS] build static libraries [default=yes]
    38. --enable-fast-install[=PKGS]
    39. optimize for fast installation [default=yes]
    40. --disable-libtool-lock avoid locking (might break parallel builds)
    41. --enable-maxmem=N enable use of temp files, set max mem usage to N MB
    42. ...
    43. # 去除大量不必要信息
    44. ...
    45. # 配置编译命令(默认使用linux gcc相关配置)
    46. Some influential environment variables:
    47. CC C compiler command
    48. CFLAGS C compiler flags
    49. LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a
    50. nonstandard directory <lib dir>
    51. LIBS libraries to pass to the linker, e.g. -l<library>
    52. CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if
    53. you have headers in a nonstandard directory <include dir>
    54. CPP C preprocessor
    55. LT_SYS_LIBRARY_PATH
    56. User-defined run-time library search path.
    57. Use these variables to override the choices made by `configure` or to help
    58. it to find libraries and programs with nonstandard names/locations.
    59. Report bugs to the package provider.

    由configure的帮助信息我们可以知道,jpeg交叉编译需要配置主机(编译完后需要运行的系统机器), 需要配置交叉编译命令以以及配置安装路径等选项。

  2. 配置交叉编译命令,在命令行输入以下命令:

    1. export OHOS_SDK=/home/owner/tools/OHOS_SDK/ohos-sdk/linux/ ## 配置SDK路径,此处需配置成自己的sdk解压目录
    2. export AS=${OHOS_SDK}/native/llvm/bin/llvm-as
    3. export CC="${OHOS_SDK}/native/llvm/bin/clang --target=aarch64-linux-ohos" ## 32bit的target需要配置成 --target=arm-linux-ohos
    4. export CXX="${OHOS_SDK}/native/llvm/bin/clang++ --target=aarch64-linux-ohos" ## 32bit的target需要配置成 --target=arm-linux-ohos
    5. export LD=${OHOS_SDK}/native/llvm/bin/ld.lld
    6. export STRIP=${OHOS_SDK}/native/llvm/bin/llvm-strip
    7. export RANLIB=${OHOS_SDK}/native/llvm/bin/llvm-ranlib
    8. export OBJDUMP=${OHOS_SDK}/native/llvm/bin/llvm-objdump
    9. export OBJCOPY=${OHOS_SDK}/native/llvm/bin/llvm-objcopy
    10. export NM=${OHOS_SDK}/native/llvm/bin/llvm-nm
    11. export AR=${OHOS_SDK}/native/llvm/bin/llvm-ar
    12. export CFLAGS="-fPIC -D__MUSL__=1" ## 32bit需要增加配置 -march=armv7a
    13. export CXXFLAGS="-fPIC -D__MUSL__=1" ## 32bit需要增加配置 -march=armv7a
  3. 执行configure命令

    安装路劲以及host配置可以在configure时执行,此处以配置arm64位为例,如若需要配置32位,将aarch64-arm替换成arm-linux即可。

    1. owner@ubuntu:~/workspace/jpeg-9e$ ./configure --prefix=/home/owner/workspace/usr/jpeg --host=aarch64-linux # 执行configure命令配置交叉编译信息
    2. checking build system type... x86_64-pc-linux-gnu
    3. checking host system type... x86_64-pc-linux-gnu
    4. checking target system type... x86_64-pc-linux-gnu
    5. ...
    6. # 删除大量configure信息
    7. ...
    8. configure: creating ./config.status
    9. config.status: creating Makefile
    10. config.status: creating libjpeg.pc
    11. config.status: creating jconfig.h
    12. config.status: executing depfiles commands
    13. config.status: executing libtool commands

    执行完confiure没有提示任何错误,即说明confiure配置成功,在当前目录会生成Makefile文件。

  4. 执行make编译命令

    configure执行成功后,在当前目录会生成Makefile文件,直接运行make即可进行交叉编译:

    1. owner@ubuntu:~/workspace/jpeg-9e$ make # 执行make编译命令
    2. make all-am
    3. make[1]: Entering directory '/home/owner/workspace/jpeg-9e'
    4. CC cjpeg.o
    5. CC rdppm.o
    6. ...
    7. # 删除大量make信息
    8. ...
    9. CC rdcolmap.o
    10. CCLD djpeg
    11. CC jpegtran.o
    12. CC transupp.o
    13. CCLD jpegtran
    14. CC rdjpgcom.o
    15. CCLD rdjpgcom
    16. CC wrjpgcom.o
    17. CCLD wrjpgcom
    18. make[1]: Leaving directory '/home/owner/workspace/jpeg-9e'
  5. 执行安装命令

    owner@ubuntu:~/workspace/jpeg-9e$ make install
  6. 执行完后对应的文件安装到prefix配置的路径/home/owner/workspace/usr/jpeg, 查看对应文件属性:

    1. owner@ubuntu:~/workspace/jpeg-9e$ cd /home/owner/workspace/usr/jpeg
    2. owner@ubuntu:~/workspace/usr/jpeg$ ls
    3. bin include lib share
    4. owner@ubuntu:~/workspace/usr/jpeg$ ls lib
    5. libjpeg.a libjpeg.la libjpeg.so libjpeg.so.9 libjpeg.so.9.5.0 pkgconfig
    6. owner@ubuntu:~/workspace/usr/jpeg$ ls include/
    7. jconfig.h jerror.h jmorecfg.h jpeglib.h
    8. owner@ubuntu:~/workspace/usr/jpeg$ file lib/libjpeg.so.9.5.0
    9. lib/libjpeg.so.9.5.0: ELF 64-bit LSB shared object, ARM aarch64, version 1 (SYSV), dynamically linked, with debug_info, not stripped

测试

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

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

  2. 打包测试资源

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

    owner@ubuntu:~/workspace$ tar -zcf jpeg-9e.tar.gz jpeg-9e/
  3. 将测试资源推送到开发板 ,打开命令行工具,执行hdc_std命令进行文件传输:

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

进入到三方库编译路径,执行make check-local进行测试:

  1. # cd /home/owner/workspace/jpeg-9e
  2. # make check-local # 执行测试命令,以下为测试用例信息
  3. rm -f testout*
  4. ./djpeg -dct int -ppm -outfile testout.ppm ./testorig.jpg
  5. ./djpeg -dct int -gif -outfile testout.gif ./testorig.jpg
  6. ./djpeg -dct int -bmp -colors 256 -outfile testout.bmp ./testorig.jpg
  7. ./cjpeg -dct int -outfile testout.jpg ./testimg.ppm
  8. ./djpeg -dct int -ppm -outfile testoutp.ppm ./testprog.jpg
  9. ./cjpeg -dct int -progressive -opt -outfile testoutp.jpg ./testimg.ppm
  10. ./jpegtran -outfile testoutt.jpg ./testprog.jpg
  11. cmp ./testimg.ppm testout.ppm
  12. cmp ./testimg.gif testout.gif
  13. cmp ./testimg.bmp testout.bmp
  14. cmp ./testimg.jpg testout.jpg
  15. cmp ./testimg.ppm testoutp.ppm
  16. cmp ./testimgp.jpg testoutp.jpg
  17. cmp ./testorig.jpg testoutt.jpg

当测试结果中未出现任何错误提示,则表示当前测试成功。至此,jpeg三方库使用OpenHarmony SDK交叉编译成功。

最后

有很多小伙伴不知道学习哪些鸿蒙开发技术?不知道需要重点掌握哪些鸿蒙应用开发知识点?而且学习时频繁踩坑,最终浪费大量时间。所以有一份实用的鸿蒙(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学习资料

总结

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/在线问答5/article/detail/885967
推荐阅读
相关标签
  

闽ICP备14008679号