目录
引言
华为仓颉语言自问世以来,凭借其原生智能化、天生全场景、高性能、强安全等特性,吸引了众多开发者的目光。当我们使用仓颉语言完成程序开发后,如何将其高效地分发部署到目标环境中,让更多用户受益,成为了关键环节。接下来,让我们探讨这一过程。
编译程序
在分发部署之前,首先要对仓颉程序进行编译。仓颉语言拥有自己的编译器 cjc ,在安装仓颉环境时会一并安装。先编写了一个简单的 “Hello World” 仓颉程序,存放在名为 “hello_world” 的目录下,源文件为 “hello.cj”。
// hello.cj
main() {
println("你好,仓颉")
}
通过在终端进入该目录,执行编译命令 “cjc hello.cj” ,编译完成后,会生成如 main(在 Linux 环境下)这样的可执行文件,以及 default.cjo 和 default.bchir2 等相关文件 。如果是Windows环境,会生成main.exe文件。这些生成的文件就是我们后续分发部署的基础。
确定分发形式
如果目标用户使用的操作系统与开发环境兼容,且不需要依赖复杂的运行时环境,那么可以直接将编译生成的可执行文件分发给用户。用户在相同系统下可直接运行。像简单的仓颉命令行工具,通过这种方式分发,用户下载后即可在本地终端执行,无需额外安装其他软件。
但是如果用户的计算机上没有安装仓颉开发环境,就需要将程序及其依赖项打包成安装包。如果只拷贝可执行文件到用户计算机上,会提示缺少运行时库。
test@ERAZE-UHYFLAFVU:~$ /mnt/d/test/main
/mnt/d/test/main: error while loading shared libraries: libcangjie-runtime.so: cannot open shared object file: No such file or directory
可以借助一些打包工具,将程序文件、运行时库、配置文件等整合在一起。在打包过程中,还可以设置安装向导,引导用户完成安装过程,如指定安装路径等。这样,用户只需下载安装包并按照提示操作,就能轻松完成应用的安装。
运行时环境考虑
下图1描绘了仓颉Native后端架构,包含了仓颉程序编译和运行的流程,其中仓颉的轻量化运行时(libcangjie-runtime.so)是其中核心组件之一。
仓颉语言提供了超轻量化的运行时,这为程序的部署和运行带来了极大优势。其运行时库剔除了不必要的冗余代码,移除了对 C++ 运行库的依赖,二进制体积最小不到 1MB 。
像前面所编写的简单程序至少需要分发两个运行库文件:
- Linux下需要libcangjie-runtime.so和libsecurec.so
- Windows下需要libcangjie-runtime.dll和libsecurec.dll
运行程序前,在Linux下需要将运行时库所在目录加到环境变量中:
export LD_LIBRARY_PATH=/mnt/d/test
此时就可以正常执行程序了:
如果是Windows操作系统,建议将运行时库所在目录加到PATH环境变量中。
在Cangjie/runtime目录下有完整的运行时库,如果使用了各种软件包,需要分发所对应的库文件。
结语
华为仓颉语言生成程序的分发部署需要综合考虑编译、分发形式、运行时环境以及目标部署环境等多个方面,确保开发的仓颉程序能够顺利地在各种环境中运行。