后端限制与说明

const 表达式

CJVM 后端由于实现限制暂不支持 Array 字面量的 const 表达式。

VArray

CJVM 后端暂不支持 VArray

C 互操作

以 C 互操作示例章节中的代码为例,CJVM 后端不需要 -L . 选项,编译命令如下:

cjc -l draw ./main.cj

CJVM 后端在编译时,cjc 编译器不会对 C 库中的符号进行解析,所有错误都发生在运行时。例如:

$ cjc main.cj    # 没有链接 libdraw.so
$ cj main.cbc    # 运行 cbc
An exception has occurred:
InternalError: AJIllegalStateException: Unsatisfied link: default.DrawPoint(unative)i32
         at default.$mainInvoke(<unknown>:0)

运行时发生链接错误,此时开发者应检查编译命令中是否包含了所有仓颉所需要的 C 库。

运行时 cj 还会根据操作系统 LD_LIBRARY_PATH 环境变量查找所需的 C 库,无法找到文件时会报错。例如:

$ cjc -l draw ./main.cj
$ cj main.cbc    # 缺少LD_LIBRARY_PATH
An exception has occurred:
InternalError: AJIOException: libpaint.so: cannot open shared object file: No such file or directory
         at default.$mainInvoke(<unknown>:0)

此时应检查 LD_LIBRARY_PATH 环境变量是否包含了所有所需 C 库的路径。