有没有办法使用idris
生成库而不是可执行文件?如果我尝试在没有main
的情况下进行编译,我会收到如下错误:
main:0:0:When elaborating an application of function run__IO:
No such variable Main.main
如果我可以生成一个库,那么有没有办法从C代码中调用它?我已经查看了生成的C代码,但看起来并不打算在外部调用它。
答案 0 :(得分:2)
简短版本,据我所知:截至2015年10月:
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文件中。