Nim后端集成指南介绍了如何从C语言中调用Nim函数。
示例函数:
该过程需要指示Nim编译器不创建
之前提到的生成的头文件被放置在
示例函数:
proc fib(a: cint): cint {.exportc.} =
if a <= 2:
result = 1
else:
result = fib(a - 1) + fib(a - 2)
该过程需要指示Nim编译器不创建
main
函数,避免链接并从以下内容创建FFI头文件:
$ nim c --noMain --noLinking --header:fib.h fib.nim
为了能够使用该函数,C主函数必须调用名为NimMain()
的函数,如下所示:#include "fib.h"
#include <stdio.h>
int main(void)
{
NimMain();
for (int f = 0; f < 10; f++)
printf("Fib of %d is %d\n", f, fib(f));
return 0;
}
之前提到的生成的头文件被放置在
nimcache
目录下。C 编译器需要指示编译所有生成的子目录 nimcache
下的文件,包括 nimbase.h
和 main.c
:
$ gcc -o m -I$HOME/.cache/nim/fib_d -Ipath/to/nim/lib $HOME/.cache/nim/fib_d/*.c maths.c
我该如何指示 Rust 编译器去查找那些位于 nimcache
下的翻译单元呢?
NimMain()
函数以加载其垃圾回收机制的重要性。如果您的示例也包括该调用,那将是很好的。 - noconst