macos - Haskell 包缺少 c 库

标签 macos haskell cabal

我在 OS X Lion 上构建 hmatrix library 时遇到问题。查看 .cabal 文件,它需要 gsl 库,所以我用 macports 安装了它。 .a 文件位于/opt/local/lib 中,.h 文件位于/opt/local/include/gsl

正如 here 建议的那样,我将内置类型从自定义更改为简单。 (没有那个改变我得到一个类似的错误)。

当我使用 cabal configure 时,我得到以下输出:

* Missing C library: gsl
This problem can usually be solved by installing the system package that
provides this library (you may need the "-dev" version). If the library is
already installed but in a non-standard location then you can use the flags
--extra-include-dirs= and --extra-lib-dirs= to specify where it is.

所以我尝试了 cabal --extra-include-dirs=/opt/local/include --extra-lib-dirs=/opt/local/lib configure ,但我仍然得到同样的错误。我可以编译和链接一个包含 gsl 的 c 程序。 cabal 正在寻找什么文件?如果我有正确的文件,我该如何告诉它如何找到它们?

libgsl.a 是一个通用二进制文件:
$ file /opt/local/lib/libgsl.a
    /opt/local/lib/libgsl.a: Mach-O universal binary with 2 architectures
    /opt/local/lib/libgsl.a (for architecture x86_64):  current ar archive random library
    /opt/local/lib/libgsl.a (for architecture i386):    current ar archive random library

ghc 看起来像是 64 位的:
$ ghc --info
 [("Project name","The Glorious Glasgow Haskell Compilation System")
 ,("GCC extra via C opts"," -fwrapv")
 ,("C compiler command","/usr/bin/llvm-gcc")
 ,("C compiler flags"," -m64 -fno-stack-protector  -m64")
 ,("ar command","/usr/bin/ar")
 ,("ar flags","clqs")
 ,("ar supports at file","NO")
 ,("touch command","touch")
 ,("dllwrap command","/bin/false")
 ,("windres command","/bin/false")
 ,("perl command","/usr/bin/perl")
 ,("target os","OSDarwin")
 ,("target arch","ArchX86_64")
 ,("target word size","8")
 ,("target has GNU nonexec stack","False")
 ,("target has subsections via symbols","True")
 ,("Project version","7.4.2")
 ,("Booter version","7.4.2")
 ,("Stage","2")
 ,("Build platform","x86_64-apple-darwin")
 ,("Host platform","x86_64-apple-darwin")
 ,("Target platform","x86_64-apple-darwin")
 ,("Have interpreter","YES")
 ,("Object splitting supported","NO")
 ,("Have native code generator","YES")
 ,("Support SMP","YES")
 ,("Unregisterised","NO")
 ,("Tables next to code","YES")
 ,("RTS ways","l debug  thr thr_debug thr_l thr_p  dyn debug_dyn thr_dyn thr_debug_dyn")
 ,("Leading underscore","YES")
 ,("Debug on","False")
 ,("LibDir","/usr/local/Cellar/ghc/7.4.2/lib/ghc-7.4.2")
 ,("Global Package DB","/usr/local/Cellar/ghc/7.4.2/lib/ghc-7.4.2/package.conf.d")
 ,("Gcc Linker flags","[\"-m64\"]")
 ,("Ld Linker flags","[\"-arch\",\"x86_64\"]")
 ]

最佳答案

作为 mac-ports 的替代方案,您可以使用 nix mac 包管理器。它在处理通过它可用的库的 c 依赖项方面做得很好。总的来说,我对它比 mac 上的任何其他包管理器都更满意。

不幸的是,mac(darwin) 与 linux 不同,没有通过 nix 提供的那么多二进制文件,因此安装 ghc 通常意味着等待它编译。

安装 nix 后安装 ghc 和 hmatrix 的命令是:

nix-env -iA nixpkgs-unstable.haskellPackages.ghc
nix-env -iA nixpkgs-unstable.haskellPackages.hmatrix

所有需要的依赖项都会为您处理好。

我刚刚在我的 macbook pro 上尝试过,在尝试了 tutorial 前几页的命令后,hmatrix 似乎在 ghci 中工作正常。 .

关于macos - Haskell 包缺少 c 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16291890/

相关文章:

swift - 打开另一个 Mac 应用程序

macos - 我可以在 QuickTime Player 10 中设置屏幕截图的尺寸吗

haskell - 使用 DuplicateRecordFields 创建镜头

haskell - 值构造函数和元组有什么区别?

haskell - Cygwin 未被 Cabal 识别为 Unix 兼容性工具链

java - Mac OS X Lion 上的 IntelliJ IDEA 11 中未找到 M2_HOME

haskell - 什么是 "a function that you call"和什么是 "a function that call you"?

haskell - Cabal 沙箱正在使用全局依赖项。无法解决

scala - Haskell 构建生态系统中类似 SBT 的功能

objective-c - 如何加快 Mac 应用程序处理 5000 个独立任务的速度?