外部函数接口(FFI)如何与Stack一起使用?

use*_*074 2 c haskell ffi haskell-stack

我正在关注一些FFI教程和示例(这里这里),我想知道在使用堆栈时应该改变什么?

在这些示例中,源C文件使用gcc -c -o termops.o termops.c包含在gcc编译中并包含在目标文件中ghc --make -main-is FfiEx -o ffi_ex FfiEx.hs termops.o.如何使用堆栈完成等效?

Ale*_*lec 5

这是我能想象的最小的FFI C项目.

$ cd c-proj
c-proj$ ls
Main.hs      c-proj.cabal c_file.c
Run Code Online (Sandbox Code Playgroud)

这些文件的内容:

然后,如果你想使用Stack,你可以运行stack init.

$ stack init
<< Shell output snipped >>
$ stack build
<< Shell output snipped >>
$ stack exec main
2 + 10
12
Run Code Online (Sandbox Code Playgroud)

  • 是的,当然!在 `executable main` 下,添加以下条目:`extra-lib-dirs: "."` 和 `extra-libraries: File.o`。 (2认同)
  • 只是挑剔:你可以做到更小.只需将"build-type:Simple"添加到c-proj.cabal的开头并删除Setup.hs. (2认同)