1# 将三方库集成到OpenHarmony的方法 2 3## 场景说明 4 5为了实现移植的三方库被其它子系统或者应用调用,将需移植的三方库Cmake或make编译方式转换为BUILD.gn编译方式之后,需要将其源码编译集成到OpenHarmony系统中,使其生成动态库,供OpenHarmony应用层调用。本文介绍如何将需移植的三方库源码利用OpenHarmony编译系统生成动态库供应用层调用。 6 7## 修改生成的BUILD.gn文件(有-a参数时) 8 91、若待转换三方库中需要引用其它三方库时,需要填写-a参数,具体填写方法可参考FAQ中三方库转换时问题解决方法,详细FAQ内容可左键单击以下链接了解:[FAQ](https://gitee.com/openharmony/napi_generator/blob/master/src/cli/cmake2gn/docs/guide/FAQ.md);在build_tmp下生成的BUILD.gn中,需要修改deps依赖,根据-a参数中填写的依赖在OpenHarmony源码third_party下所有BUILD.gn中查找依赖的库的定义,然后复制库的路径,在生成的BUILD.gn文件中的deps中修改依赖的库的路径。例如:转换curl三方库时依赖ssl和crypto库: 10 11-a参数中包含的依赖: 12 13``` 14(-DOPENSSL_INCLUDE_DIR=/home/kaihong1/Openharmony1207/third_party/boringssl/src/include,-DOPENSSL_CRYPTO_LIBRARY=/home/kaihong1/Openharmony1207/out/hi3516dv300/developtools/profiler/libcrypto.z.so,-DOPENSSL_SSL_LIBRARY=/home/kaihong1/Openharmony1207/out/hi3516dv300/developtools/profiler/libssl.z.so) 15``` 16 17生成的BUILD.gn文件(build_tmp/lib/BUILD.gn): 18 19``` 20 ... 21 deps = [ 22 "//out/hi3516dv300/developtools/profiler/libssl.z.so", 23 "//out/hi3516dv300/developtools/profiler/libcrypto.z.so" 24 ] 25 ... 26``` 27 28修改为: 29 30``` 31 ... 32 deps = [ 33 "//third_party/boringssl:ssl", 34 "//third_party/boringssl:crypto" 35 ] 36 ... 37``` 38 39同理修改build_tmp/src下的BUILD.gn文件。 40 41## 通过其它子系统调用 42 431、此处以OpenHarmony/foundation/multimodalinput组件调用mbedtls-development组件为例。在~/multimodalinput/input/BUILD.gn文件中添加mbedtls-development依赖,其中“//third_party/mbedtls-development/build_tmp”为mbedtls-development组件BUILD.gn文件所在相对路径;“all_targets”为mbedtls-development组件BUILD.gn文件中group名称。具体书写如下所示: 44 45``` 46harmony@Ubuntu-64:~$ cd /home/harmony/OpenHarmony/foundation/multimodalinput/input/ 47 harmony@Ubuntu-64:~/OpenHarmony/foundation/multimodalinput/input$ cat BUILD.gn 48 ...... 49 ohos_shared_library("mmi_uinject") { 50 ...... 51 deps = [ 52 "//drivers/peripheral/input/hal:hdi_input", 53 "//utils/native/base:utils", 54 "//third_party/mbedtls-development/build_tmp:all_targets", 55 ] 56 ...... 57``` 58 592、进入~/OpenHarmony目录下,通过ninja形式编译,编译命令及编译结果如下: 60 61``` 62ninja -C out/khdvk_rk3568_a all_targets 63``` 64 65 66 673、编译成功后,会生成mbedtls-development相关动态库文件或可执行程序,生成文件及路径如下所示: 68 69 70 71## 总结 72 73根据以上操作,即可将三方库集成到OpenHarmony源码中。 74