机械加工网站平台,南京app制作开发公司,多个wordpress,网站建设 商城以double-conversion库为例#xff0c;其移植过程如下文所示。
源码获取
从仓库获取double-conversion源码#xff0c;其目录结构如下表#xff1a;
表1 源码目录结构
名称描述double-conversion/cmake/CMake组织编译使用到的模板double-conversion/double-conversion/源…以double-conversion库为例其移植过程如下文所示。
源码获取
从仓库获取double-conversion源码其目录结构如下表
表1 源码目录结构
名称描述double-conversion/cmake/CMake组织编译使用到的模板double-conversion/double-conversion/源文件目录double-conversion/msvc/-double-conversion/test/测试用例源文件double-conversion/.gitignore-double-conversion/AUTHORS-double-conversion/BUILD-double-conversion/CMakeLists.txtCMake方式顶层编译组织文件double-conversion/COPYING-double-conversion/Changelog-double-conversion/LICENSE-double-conversion/Makefile-double-conversion/README.md-double-conversion/SConstruct-double-conversion/WORKSPACE-
移植思路
移植思路通过修改工具链交叉编译该三方库生成OpenHarmony平台的可执行文件最后再通过GN调用CMake的方式添加到OpenHarmony工程中。
交叉编译
编译参考
代码仓库的README.md中详细介绍了使用CMake编译double-conversion库的步骤以及测试方法。本文参考该指导设置该库的编译配置并完成测试。若开发人员在移植过程中对该库的编译选项配置有疑惑的地方可参考该指导。对于其他使用CMake可独立编译的三方库在移植时可以参考其自带的编译指导。
设置执行交叉编译
CMake方式可通过指定工具链进行交叉编译修改并编译该库生成OpenHarmony平台的可执行文件步骤如下 设置工具链 将下列clang工具链配置添加到该工程的顶层CMakeLists.txt即表1中的该文件中即可。 set(CMAKE_CROSSCOMPILING TRUE)
set(CMAKE_SYSTEM_NAME Generic)
set(CMAKE_CXX_COMPILER_ID Clang)
set(CMAKE_TOOLCHAIN_PREFIX llvm-)
#指定c编译工具确保工具链所在路径已经添加到了PATH环境变量中和编译标志使用clang编译时标志中必须指定--target否则无法交叉编译。
set(CMAKE_C_COMPILER clang)
set(CMAKE_C_FLAGS --targetarm-liteos -D__clang__ -marcharmv7-a -w -mfloat-abisoftfp -mcpucortex-a7 -mfpuneon-vfpv4)
#指定c编译工具确保工具链所在路径已经添加到了PATH环境变量中和编译标志必须指定--target否则无法交叉编译。
set(CMAKE_CXX_COMPILER clang)
set(CMAKE_CXX_FLAGS --targetarm-liteos -D__clang__ -marcharmv7-a -w -mfloat-abisoftfp -mcpucortex-a7 -mfpuneon-vfpv4)
#指定链接工具和链接标志必须指定--target和--sysroot其中OHOS_ROOT_PATH可通过cmake命令后缀参数来指定。
set(MY_LINK_FLAGS --targetarm-liteos --sysroot${OHOS_SYSROOT_PATH})
set(CMAKE_LINKER clang)
set(CMAKE_CXX_LINKER clang)
set(CMAKE_C_LINKER clang)
set(CMAKE_C_LINK_EXECUTABLE${CMAKE_C_LINKER} ${MY_LINK_FLAGS} FLAGS LINK_FLAGS OBJECTS -o TARGET LINK_LIBRARIES)
set(CMAKE_CXX_LINK_EXECUTABLE${CMAKE_CXX_LINKER} ${MY_LINK_FLAGS} FLAGS LINK_FLAGS OBJECTS -o TARGET LINK_LIBRARIES)
#指定链接库的查找路径。
set(CMAKE_SYSROOT ${OHOS_SYSROOT_PATH}) 执行编译 linux命令行中进入double-conversion的源文件目录即标1所示目录执行下列命令 mkdir build cd build
cmake .. -DBUILD_TESTINGON -DOHOS_SYSROOT_PATH...
make -j 其中OHOS_SYSROOT_PATH需用绝对路径指定出sysroot目录的位置以OpenHarmony为例即目录out/hispark_xxx/ipcamera_hispark_xxx/sysroot的绝对路径。上述目录会在全量编译后生成因此移植前先完成一次全量编译。 查看结果 步骤2操作完成后build目录下会生成静态库文件和测试用例 表2 编译生成文件目录结构 名称描述double-conversion/build/libdouble-conversion.a生成的静态库文件double-conversion/build/test/目录下存放生成的测试用例和相关CMake缓存文件double-conversion/build/CMakeCache.txtCMake构建过程中的缓存文件double-conversion/build/CMakeFiles/-double-conversion/build/cmake_install.cmake-double-conversion/build/CTestTestfile.cmake-double-conversion/build/DartConfiguration.tcl-double-conversion/build/generated/-double-conversion/build/Makefile-double-conversion/build/Testing/-
测试 搭建OpenHarmony环境 以Hi3516DV300为例编译出OpenHarmony镜像烧写到开发板相关操作可参考快速入门小型系统部分。 进入系统如下所示 图1 OpenHarmony启动成功界面 挂载nfs目录将表2中test目录下cctest可执行文件放入nfs目录 执行用例 该库采用非交叉编译时用例是通过make test执行CMake会有相关的执行结果统计交叉编译时无法使用该方法因此可直接执行生成的测试文件完成测试。 挂载成功后执行下列命令可列出用例所有条目 cd nfs
./cctest --list 上述命令执行结果部分展示 test-bignum/Assign
test-bignum/ShiftLeft
test-bignum/AddUInt64
test-bignum/AddBignum
test-bignum/SubtractBignum
test-bignum/MultiplyUInt32
test-bignum/MultiplyUInt64
test-bignum/MultiplyPowerOfTen
test-bignum/DivideModuloIntBignum
test-bignum/Compare
test-bignum/PlusCompare
test-bignum/Square
test-bignum/AssignPowerUInt16
test-bignum-dtoa/BignumDtoaVariousDoubles
test-bignum-dtoa/BignumDtoaShortestVariousFloats
test-bignum-dtoa/BignumDtoaGayShortest
test-bignum-dtoa/BignumDtoaGayShortestSingle
test-bignum-dtoa/BignumDtoaGayFixed
test-bignum-dtoa/BignumDtoaGayPrecision
test-conversions/DoubleToShortest
test-conversions/DoubleToShortestSingle
... 以test-bignum条目为例执行下列命令开始测试 ./cctest test-bignum 测试结果如下则表示通过 Ran 13 tests.
将该库编译添加到OpenHarmony工程中 复制库到OpenHarmony工程中 拷贝已经能够成功交叉编译的库到OpenHarmony的third_party目录为了不修改要移植的三方库目录下的BUILD.gn文件再添加一层目录放置新增的gn转CMake编译适配文件新增的文件有BUILD.gn、build_thirdparty.py、 config.gni新增后的目录结构如下所示。 表3 添加到工程后的目录结构 名称描述OpenHarmony/third_party/double-conversion/BUILD.gn将三方库加入工程的gn适配文件OpenHarmony/third_party/double-conversion/build_thirdparty.pyGN调用shell命令脚本文件由上面GN文件将相关命令传入实现GN转CMakeOpenHarmony/third_party/double-conversion/config.gni三方库编译配置文件可修改该文件来配置用例是否参与构建等OpenHarmony/third_party/double-conversion/double-conversion/要移植的三方库目录 添加gn到CMake适配文件 新增的BUILD.gn文件实现如下其他采用CMake方式可独立编译的三方库移植到OpenHarmony平台时只需修改路径即可。 import(config.gni)
group(double-conversion) {if (ohos_build_thirdparty_migrated_from_fuchisa true) {deps [:make]}
}
if (ohos_build_thirdparty_migrated_from_fuchisa true) {action(make) {script //third_party/double-conversion/build_thirdparty.pyoutputs [$root_out_dir/log_dc.txt]exec_path rebase_path(rebase_path(./build, ohos_third_party_dir))command rm * .* -rf $CMAKE_TOOLS_PATH/cmake .. $CMAKE_FLAG $CMAKE_TOOLCHAIN_FLAG make -jargs [--path$exec_path,--command${command}]}
} 新增的config.gni用于配置该库实现如下其他采用CMake方式可独立编译的三方库移植到OpenHarmony时只需修改CMAKE_FLAG的配置即可。 #CMAKE_FLAG: config compile feature
CMAKE_FLAG -DBUILD_TESTINGON -DCMAKE_CXX_STANDARD11#toolchainfollow up-layerdepend on $ohos_build_compiler
if (ohos_build_compiler clang) {CMAKE_TOOLCHAIN_FLAG -DOHOS_SYSROOT_PATH${root_out_dir}sysroot
} else {CMAKE_TOOLCHAIN_FLAG
}#CMake tools path,no need setting if this path already joined to $PATH.
CMAKE_TOOLS_PATH setting CMake tools path... 新增的build_thirdparty.py实现如下其他采用CMake方式可独立编译的三方库移植到OpenHarmony时无需修改即可使用。 import os
import sys
from subprocess import Popen
import argparse
import shlexdef cmd_exec(command):cmd shlex.split(command)proc Popen(cmd)proc.wait()ret_code proc.returncodeif ret_code ! 0:raise Exception({} failed, return code is {}.format(cmd, ret_code))def main():parser argparse.ArgumentParser()parser.add_argument(--path, helpBuild path.)parser.add_argument(--command, helpBuild command.)parser.add_argument(--enable, helpenable python., nargs*)args parser.parse_args()if args.enable:if args.enable[0] false:returnif args.path:curr_dir os.getcwd()os.chdir(args.path)if args.command:if in args.command:command args.command.split()for data in command:cmd_exec(data)else:cmd_exec(args.command)os.chdir(curr_dir)if __name__ __main__:sys.exit(main()) 在配置文件中添加开关控制该库编译默认设为关闭 在//build/lite/ohos_var.gni文件中添加下列配置 declare_args() {ohos_build_thirdparty_migrated_from_fuchisa true} 编译构建 手动单独构建 执行下列命令 hb build -T //third_party/double-conversion:double-conversion 编译成功则build目录下会生成静态库文件和测试用例
最后
有很多小伙伴不知道学习哪些鸿蒙开发技术不知道需要重点掌握哪些鸿蒙应用开发知识点而且学习时频繁踩坑最终浪费大量时间。所以有一份实用的鸿蒙HarmonyOS NEXT资料用来跟着学习是非常有必要的。
这份鸿蒙HarmonyOS NEXT资料包含了鸿蒙开发必掌握的核心知识要点内容包含了ArkTS、ArkUI开发组件、Stage模型、多端部署、分布式应用开发、音频、视频、WebGL、OpenHarmony多媒体技术、Napi组件、OpenHarmony内核、Harmony南向开发、鸿蒙项目实战等等鸿蒙HarmonyOS NEXT技术知识点。
希望这一份鸿蒙学习资料能够给大家带来帮助有需要的小伙伴自行领取限时开源先到先得~无套路领取
获取这份完整版高清学习路线请点击→纯血版全套鸿蒙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学习资料
总结
总的来说华为鸿蒙不再兼容安卓对中年程序员来说是一个挑战也是一个机会。只有积极应对变化不断学习和提升自己他们才能在这个变革的时代中立于不败之地。