在Idris中生成库而不是可执行文件?

时间:2015-03-14 21:58:56

标签: idris

有没有办法使用idris生成库而不是可执行文件?如果我尝试在没有main的情况下进行编译,我会收到如下错误:

main:0:0:When elaborating an application of function run__IO:
    No such variable Main.main

如果我可以生成一个库,那么有没有办法从C代码中调用它?我已经查看了生成的C代码,但看起来并不打算在外部调用它。

1 个答案:

答案 0 :(得分:2)

简短版本,据我所知:截至2015年10月:

  • 您可以生成Idris库,但不能生成.a或.so。
  • 您可以从Idris调用C代码,但不能从C调用Idris代码。

Idris可以将模块编译为库,但它被编译为IBC文件以与其他Idris代码链接,而不是用于链接C代码的.o对象文件。

Idris的C FFI旨在用于呼叫C,而不是从C调用Idris。截至2015年10月,work is underway启用自动贩卖Idris功能,将C作为C函数指针启用回调 - 基于C API。

实施例

在Foo.ipkg中:

package Foo

modules = Foo

在Foo.idr:

module Main

foo : Int -> Int
foo i = i + 1

大厦:

> ls
Foo.idr  Foo.ipkg
> idris --build Foo.ipkg
Type checking ./Foo.idr
> ls
00Foo-idx.ibc Foo.ibc       Foo.idr       Foo.ipkg

您可以看到构建库如何生成两个.ibc文件。如果您想要构建可执行文件,则可以将main = …executable = …行添加到.ipkg文件中。