华为仓颉语言生成的程序的分发部署

目录

引言

编译程序

确定分发形式

运行时环境考虑

结语


引言

华为仓颉语言自问世以来,凭借其原生智能化、天生全场景、高性能、强安全等特性,吸引了众多开发者的目光。当我们使用仓颉语言完成程序开发后,如何将其高效地分发部署到目标环境中,让更多用户受益,成为了关键环节。接下来,让我们探讨这一过程。

编译程序

在分发部署之前,首先要对仓颉程序进行编译。仓颉语言拥有自己的编译器 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目录下有完整的运行时库,如果使用了各种软件包,需要分发所对应的库文件。

 

结语

华为仓颉语言生成程序的分发部署需要综合考虑编译、分发形式、运行时环境以及目标部署环境等多个方面,确保开发的仓颉程序能够顺利地在各种环境中运行。

华为仓颉编程语言华为自主研发的一门全新编程语言,专为满足现代软件开发需求而设计。它在2024年6月21日的华为开发者大会上正式发布,并伴随着HarmonyOS NEXT的推出,标志着华为在构建自主生态系统方面迈出了重要一步[^1]。 ### 仓颉编程语言的特点 - **语法简洁**:仓颉语言采用了现代化的语法设计,旨在提高代码的可读性和编写效率。 - **高性能**:通过优化编译器和运行时系统,仓颉语言能够生成高效的机器码,适用于对性能要求较高的应用场景。 - **跨平台支持**:仓颉语言支持多种操作系统和硬件架构,可以轻松地在不同平台上部署应用。 - **模块化设计**:仓颉语言支持模块化编程,有助于大型项目的管理和维护。 - **丰富的标准库**:仓颉语言提供了一套全面的标准库,涵盖了常见的数据结构、算法以及网络通信等功能。 ### 入门教程 #### 第一个仓颉程序 以下是一个简单的仓颉程序示例,用于输出“你好,仓颉。”: ```cj // main.cj import std; fn main() { println!("你好,仓颉。"); } ``` 保存上述代码到一个文件中,并将其命名为`main.cj`。然后使用仓颉编译器进行编译和运行: ```bash cj build main.cj ./main ``` #### 基本语法 - **变量声明**:仓颉语言支持类型推断,可以通过赋值自动确定变量类型。 ```cj let x = 5; // 整数类型 let y = 3.14; // 浮点数类型 let z = "Hello"; // 字符串类型 ``` - **函数定义**:使用`fn`关键字定义函数。 ```cj fn add(a: int, b: int) -> int { return a + b; } ``` - **控制流**:支持常见的条件判断和循环语句。 ```cj if x > 0 { println!("x 是正数"); } else { println!("x 不是正数"); } for i in 0..10 { println!("{}", i); } ``` #### 数据类型 仓颉语言支持多种基本数据类型,包括整型、浮点型、布尔型和字符串等。此外,还提供了复合类型如数组、元组和结构体等。 ```cj let arr = [1, 2, 3]; // 数组 let tuple = (1, "two", 3.0); // 元组 struct Point { x: int, y: int, } let p = Point { x: 10, y: 20 }; ``` #### 模块化编程 仓颉语言支持模块化编程,可以通过导入其他模块来组织代码。 ```cj // module.cj export fn greet() { println!("欢迎学习仓颉编程语言!"); } // main.cj import module; fn main() { module::greet(); } ``` ### 学习资源 为了更好地掌握仓颉编程语言,建议参考官方文档和社区提供的教程。这些资源通常包含详细的API说明、示例代码以及最佳实践指南,可以帮助开发者快速上手并深入理解这门新语言的特点与优势。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

神一样的老师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值