在 Engee 中调用 C 代码¶
在本演示中,我们将探讨在Engee脚本中使用C代码的可能性。毕竟,虽然大部分代码可以用Engee编写,但有许多高质量的成熟数值计算库已经用C编写。
Engee坚持 "无模板 "理念:您可以直接从脚本中调用函数,无需任何 "链接 "代码、代码生成或编译。
这可以通过调用 @ccall 宏来实现。
例如,让我们调用C标准库中的clock函数。Clock 不需要参数,在我们的例子中返回 Int32。
In [ ]:
t = @ccall clock()::Int32
print("Тип t: " * string(typeof(t)) * ", при t равном: " * string(t))
现在,让我们考虑调用C编写的函数的一种变体。要做到这一点,让我们获取一个用C编写的函数文件,并从中创建一个可执行文件.so。
为此,请进入Engee命令行,在shell行加上*号,然后执行以下命令。
<代码 cd /user/start/examples/integrated_languages/calling_c_code
<代码 gcc -c -fPIC say_y.c -o say_y.o
<代码 gcc say_y.o -shared -o say_y.so
下面是执行该操作的截图。
C 函数本身非常简单:输出输入参数。下面的截图显示了函数的代码。
要调用该函数,我们需要指定.so文件的路径并调用该函数本身。
In [ ]:
@ccall "$(@__DIR__)/say_y.so".say_y(10::Cint)::Cvoid
输出¶
在本演示中,我们通过调用脚本内的函数和连接自定义函数来完成任务,探索了Engee在应用C方面的能力。