问题描述
我正在尝试将包含导出的 ffi 代码的共享库构建到共享库中。我想知道是否可以使用诸如 stack 或 nix 之类的常用工具来做到这一点(所以基本上是使用 cabal)? 是吗?那怎么办?
https://github.com/bennoleslie/haskell-shared-example 包含此类代码的良好示例,但带有手动构建说明。
解决方法
您要查找的 .cabal 文件节是 foreign-library
。 documentation 很好地描述了它。
至于 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)
下。