cabal/stack/nix可以用来编译成动态库吗?

Can cabal/stack/nix be used to compile into dynamic library?

我正在尝试将包含导出的 ffi 代码的共享库构建到共享库中。我想知道是否可以使用 stack 或 nix(基本上是 cabal)等常用工具来做到这一点? 是吗?那怎么办?

https://github.com/bennoleslie/haskell-shared-example 包含此类代码的良好示例,但带有手动构建说明。

您要查找的 .cabal 文件节是 foreign-librarydocumentation描述的很好

至于nix,如果你使用haskell.nix,在<binding>.components.foreignlibs.<libname>.

下会暴露出对国外库的推导

cabal2nix、运行

一起构建
cabal2nix . > default.nix
nix-build -E '(import <nixpkgs> {}).haskellPackages.callPackage ./default.nix {}'

您的共享库将在 result/lib/ghc-<version>/<your-lib>.(so|dll|dylib).