如何使用zig编译器来编译nim代码?

Phi*_*ner 5 compilation nim-lang zig

Nim 将自己的代码转换为 C 代码,并使用 C 编译器对其进行编译。Zig 有自己的编译器,它有许多不错的功能,会让您想要使用它,例如允许您选择要动态链接的 glibc 版本,或更容易的交叉编译。

因此,我想使用 Zig 编译器编译我的 nim 代码,但这可能吗?

Phi*_*ner 4

Nim 确实提供了使用 Zig 编译器的方法,因为 Clang 是其可行的后端之一。

要使用它,您需要使用 clang 编译器并传递标志以显式使用 zig 的编译器进行链接和编译。该过程并不复杂,但涉及多个步骤:

  1. 安装之字形
  2. 编写一个名为 bash 或其他 shell 脚本,zigcc其唯一目的是调用 zig 编译器。这是必要的,因为决定使用哪个编译器的标志不喜欢其参数中包含空格,但我们确实需要它。写入后,移至zigccPATH 环境变量上的目录(例如/usr/local/bin在 Linux 上),或者将包含脚本的目录路径添加zigcc到 PATH 变量。

或者,您可以通过 nimble ( ) 安装此软件包nimble install https://github.com/enthus1ast/zigcc,它包含这样一个脚本,该脚本将安装到已经在您的路径上的 nimble 目录中。

如果您想编写自己的 shell 脚本,请参阅下面的示例,了解如何使用 bash:

#!/bin/sh
zig cc $@
Run Code Online (Sandbox Code Playgroud)
  1. 您现在可以调用 nim 并告诉 clang 用于zigcc编译。下面是一个可用于这些目的的 bash 脚本示例:
#!/bin/sh
nim c \
--cc:clang \
--clang.exe="zigcc" \
--clang.linkerexe="zigcc" \
--forceBuild:on \
--opt:speed \
src/<YOUR_MAIN_FILE>.nim
Run Code Online (Sandbox Code Playgroud)

如果您想使用 zigcc 指定 glibc 版本,只需将这些标志添加到上面的命令即可(将 X.XX 替换为您想要的相应 glibc 版本):

--passC:"-target x86_64-linux-gnu.X.XX -fno-sanitize=undefined" \
--passL:"-target x86_64-linux-gnu.X.XX -fno-sanitize=undefined" \
Run Code Online (Sandbox Code Playgroud)