赞
踩
configure 是一个由 GNU Autoconf 提供的脚本用于自动生成 Makefile。Autoconf 是一个用于创建可移植的源代码包的工具,它可以检测系统的特性和能力并生成适合当前系统的配置文件。
在使用 configure 进行编译时,首先运行 configure 脚本,它会根据当前系统的特性和用户指定的选项生成一个或多个 Makefile。这些 Makefile 包含了编译该软件所需的详细规则和指令。
本文通过jpeg库来展示如何将一个configure构建方式的三方库在linux环境上通过OpenHarmony SDK
进行交叉编译。
从 openHarmony SDK 官方发布渠道 下载SDK
解压SDK
owner@ubuntu:~/workspace$ tar -zxvf version-Master_Version-OpenHarmony_3.2.10.3-20230105_163913-ohos-sdk-full.tar.gz
进入到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
下载三方库代码:
owner@ubuntu:~/workspace$ wget http://www.ijg.org/files/jpegsrc.v9e.tar.gz ## 下载指定版本的源码包
解压源码包
owner@ubuntu:~/workspace$ tar -zxvf jpegsrc.v9e.tar.gz ## 解压源码包
查看configure配置
进入到jpeg目录执行configure配置,如若对configure配置项不熟悉,我们可以通过运行configure --help
查看:
- owner@ubuntu:~/workspace/jpeg-9e$ ./configure --help
- `configure` configures libjpeg 9.5.0 to adapt to many kinds of systems.
- Usage: ./configure [OPTION]... [VAR=VALUE]...
- ...
- # 去除大量不必要信息
- ...
- # 配置安装选项
- Installation directories:
- --prefix=PREFIX install architecture-independent files in PREFIX
- [/usr/local]
- ...
- # 去除大量不必要信息
- ...
- # 配置编译的主机选项(--host),默认配置为linux
- System types:
- --build=BUILD configure for building on BUILD [guessed]
- --host=HOST cross-compile to build programs to run on HOST [BUILD]
- --target=TARGET configure for building compilers for TARGET [HOST]
- # cJSON库配置可选项
- Optional Features:
- --disable-option-checking ignore unrecognized --enable/--with options
- --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
- --enable-FEATURE[=ARG] include FEATURE [ARG=yes]
- --enable-silent-rules less verbose build output (undo: "make V=1")
- --disable-silent-rules verbose build output (undo: "make V=0")
- --enable-maintainer-mode
- enable make rules and dependencies not useful (and
- sometimes confusing) to the casual installer
- --enable-dependency-tracking
- do not reject slow dependency extractors
- --disable-dependency-tracking
- speeds up one-time build
- --enable-ld-version-script
- enable linker version script (default is enabled
- when possible)
- --enable-shared[=PKGS] build shared libraries [default=yes]
- --enable-static[=PKGS] build static libraries [default=yes]
- --enable-fast-install[=PKGS]
- optimize for fast installation [default=yes]
- --disable-libtool-lock avoid locking (might break parallel builds)
- --enable-maxmem=N enable use of temp files, set max mem usage to N MB
- ...
- # 去除大量不必要信息
- ...
- # 配置编译命令(默认使用linux gcc相关配置)
- Some influential environment variables:
- CC C compiler command
- CFLAGS C compiler flags
- LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a
- nonstandard directory <lib dir>
- LIBS libraries to pass to the linker, e.g. -l<library>
- CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if
- you have headers in a nonstandard directory <include dir>
- CPP C preprocessor
- LT_SYS_LIBRARY_PATH
- User-defined run-time library search path.
-
- Use these variables to override the choices made by `configure` or to help
- it to find libraries and programs with nonstandard names/locations.
- Report bugs to the package provider.
由configure的帮助信息我们可以知道,jpeg交叉编译需要配置主机(编译完后需要运行的系统机器), 需要配置交叉编译命令以以及配置安装路径等选项。
配置交叉编译命令,在命令行输入以下命令:
- export OHOS_SDK=/home/owner/tools/OHOS_SDK/ohos-sdk/linux/ ## 配置SDK路径,此处需配置成自己的sdk解压目录
- export AS=${OHOS_SDK}/native/llvm/bin/llvm-as
- export CC="${OHOS_SDK}/native/llvm/bin/clang --target=aarch64-linux-ohos" ## 32bit的target需要配置成 --target=arm-linux-ohos
- export CXX="${OHOS_SDK}/native/llvm/bin/clang++ --target=aarch64-linux-ohos" ## 32bit的target需要配置成 --target=arm-linux-ohos
- export LD=${OHOS_SDK}/native/llvm/bin/ld.lld
- export STRIP=${OHOS_SDK}/native/llvm/bin/llvm-strip
- export RANLIB=${OHOS_SDK}/native/llvm/bin/llvm-ranlib
- export OBJDUMP=${OHOS_SDK}/native/llvm/bin/llvm-objdump
- export OBJCOPY=${OHOS_SDK}/native/llvm/bin/llvm-objcopy
- export NM=${OHOS_SDK}/native/llvm/bin/llvm-nm
- export AR=${OHOS_SDK}/native/llvm/bin/llvm-ar
- export CFLAGS="-fPIC -D__MUSL__=1" ## 32bit需要增加配置 -march=armv7a
- export CXXFLAGS="-fPIC -D__MUSL__=1" ## 32bit需要增加配置 -march=armv7a
执行configure命令
安装路劲以及host配置可以在configure时执行,此处以配置arm64位为例,如若需要配置32位,将aarch64-arm
替换成arm-linux
即可。
- owner@ubuntu:~/workspace/jpeg-9e$ ./configure --prefix=/home/owner/workspace/usr/jpeg --host=aarch64-linux # 执行configure命令配置交叉编译信息
- checking build system type... x86_64-pc-linux-gnu
- checking host system type... x86_64-pc-linux-gnu
- checking target system type... x86_64-pc-linux-gnu
- ...
- # 删除大量configure信息
- ...
- configure: creating ./config.status
- config.status: creating Makefile
- config.status: creating libjpeg.pc
- config.status: creating jconfig.h
- config.status: executing depfiles commands
- config.status: executing libtool commands
执行完confiure没有提示任何错误,即说明confiure配置成功,在当前目录会生成Makefile文件。
执行make编译命令
configure执行成功后,在当前目录会生成Makefile文件,直接运行make即可进行交叉编译:
- owner@ubuntu:~/workspace/jpeg-9e$ make # 执行make编译命令
- make all-am
- make[1]: Entering directory '/home/owner/workspace/jpeg-9e'
- CC cjpeg.o
- CC rdppm.o
- ...
- # 删除大量make信息
- ...
- CC rdcolmap.o
- CCLD djpeg
- CC jpegtran.o
- CC transupp.o
- CCLD jpegtran
- CC rdjpgcom.o
- CCLD rdjpgcom
- CC wrjpgcom.o
- CCLD wrjpgcom
- make[1]: Leaving directory '/home/owner/workspace/jpeg-9e'
执行安装命令
owner@ubuntu:~/workspace/jpeg-9e$ make install
执行完后对应的文件安装到prefix配置的路径/home/owner/workspace/usr/jpeg
, 查看对应文件属性:
- owner@ubuntu:~/workspace/jpeg-9e$ cd /home/owner/workspace/usr/jpeg
- owner@ubuntu:~/workspace/usr/jpeg$ ls
- bin include lib share
- owner@ubuntu:~/workspace/usr/jpeg$ ls lib
- libjpeg.a libjpeg.la libjpeg.so libjpeg.so.9 libjpeg.so.9.5.0 pkgconfig
- owner@ubuntu:~/workspace/usr/jpeg$ ls include/
- jconfig.h jerror.h jmorecfg.h jpeglib.h
- owner@ubuntu:~/workspace/usr/jpeg$ file lib/libjpeg.so.9.5.0
- 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。
测试环境配置,请参考 lycium CItools。
打包测试资源
使用原生库的测试用例进行测试,我们为了保证测试时不进行编译操作,我们需要把整个编译的源码作为测试资源包推送到开发板,且需要保证三方库在开发板的路径与编译时路径一致:
owner@ubuntu:~/workspace$ tar -zcf jpeg-9e.tar.gz jpeg-9e/
将测试资源推送到开发板 ,打开命令行工具,执行hdc_std命令进行文件传输:
- hdc_std file send X:\workspace\jpeg-9e.tar.gz /data/ ## 推送资源到开发板
- hdc_std shell ## 进入开发板系统
- # mkdir -p /home/owner/ ## 设置与编译时同样的路径
- # cd /home/owner/
- # ln -s workspace /data/ ## 系统根目录空间有限,建议通过软链接配置路径
- # cd workspace
- # tar -zxf jpeg-9e.tar.gz ## 解压测试资源
进入到三方库编译路径,执行make check-local
进行测试:
- # cd /home/owner/workspace/jpeg-9e
- # make check-local # 执行测试命令,以下为测试用例信息
- rm -f testout*
- ./djpeg -dct int -ppm -outfile testout.ppm ./testorig.jpg
- ./djpeg -dct int -gif -outfile testout.gif ./testorig.jpg
- ./djpeg -dct int -bmp -colors 256 -outfile testout.bmp ./testorig.jpg
- ./cjpeg -dct int -outfile testout.jpg ./testimg.ppm
- ./djpeg -dct int -ppm -outfile testoutp.ppm ./testprog.jpg
- ./cjpeg -dct int -progressive -opt -outfile testoutp.jpg ./testimg.ppm
- ./jpegtran -outfile testoutt.jpg ./testprog.jpg
- cmp ./testimg.ppm testout.ppm
- cmp ./testimg.gif testout.gif
- cmp ./testimg.bmp testout.bmp
- cmp ./testimg.jpg testout.jpg
- cmp ./testimg.ppm testoutp.ppm
- cmp ./testimgp.jpg testoutp.jpg
- 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学习资料
HarmonOS基础技能
有了路线图,怎么能没有学习资料呢,小编也准备了一份联合鸿蒙官方发布笔记整理收纳的一套系统性的鸿蒙(OpenHarmony )学习手册(共计1236页)与鸿蒙(OpenHarmony )开发入门教学视频,内容包含:ArkTS、ArkUI、Web开发、应用模型、资源分类…等知识点。
获取以上完整版高清学习路线,请点击→纯血版全套鸿蒙HarmonyOS学习资料
OpenHarmony北向、南向开发环境搭建
获取以上完整鸿蒙HarmonyOS学习资料,请点击→纯血版全套鸿蒙HarmonyOS学习资料
总的来说,华为鸿蒙不再兼容安卓,对中年程序员来说是一个挑战,也是一个机会。只有积极应对变化,不断学习和提升自己,他们才能在这个变革的时代中立于不败之地。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。