0

我一直在 ghci 环境中使用 hMatrix 包,一切正常(例如,我可以导入 Numeric.LinearAlgebra.HMatrix)。但是,当我尝试在脚本中导入和使用相同的内容时,一切都会中断(为了便于阅读,我略微截断了错误消息(_base_GHCiIO-errors 的更长列表))。例如,文件中的这两行会创建以下错误。有谁知道可能是什么原因?我在 Mac OS X Yosemite 上。

import Numeric.LinearAlgebra.HMatrix

main = print ((2><1) [1.0::Float,1.0])

$ ghc 2_12.hs 
[1 of 1] Compiling Main             ( 2_12.hs, 2_12.o )
Linking 2_12 ...
Undefined symbols for architecture x86_64:
  "_iconv", referenced from:
  _hs_iconv in libHSbase-4.7.0.2.a(iconv.o)
 (maybe you meant: _hs_iconv,
  _base_GHCziIOziEncodingziIconv_iconvEncoding9_info ,
  _base_GHCziIOziEncodingziIconv_iconvEncoding8_info,
  _base_GHCziIOziEncodingziIconv_iconvEncoding9_closure ,
  _hs_iconv_open , _hs_iconv_close ,
  "_iconv_close", referenced from:
  _hs_iconv_close in libHSbase-4.7.0.2.a(iconv.o)
 (maybe you meant: _hs_iconv_close)
 "_iconv_open", referenced from:
 _hs_iconv_open in libHSbase-4.7.0.2.a(iconv.o)
 (maybe you meant: _hs_iconv_open)
 "_locale_charset", referenced from:
  _localeEncoding in libHSbase-4.7.0.2.a(PrelIOUtils.o)
 ld: symbol(s) not found for architecture x86_64
 clang: error: linker command failed with exit code 1 (use -v to see     
 invocation)
4

1 回答 1

1

你可能已经用 MacPorts 安装了 libiconv。MacPorts libiconv 中的定义(令人讨厌)与 OS X libiconv 中的定义有所不同。这里有更多的解释。

我遇到了同样的问题,我的解决方案是将 --extra-lib-dirs=/usr/lib 参数传递给 cabal(/usr/lib 是 OS X 保留 libiconv 的位置)。您可以cabal configure --extra-lib-dir=/usr/lib在编译之前使用,或者很可能也可以使用cabal install --extra-lib-dir=/usr/lib. 您还可以将 extra-lib-dirs 语句添加到您的 cabal 文件中。/usr/lib 已经包含在内,但通常首先搜索 MacPorts 库目录:通过添加 --extra-lib-dirs 参数,您可以确保 ghc 在搜索 MacPorts 库目录之前搜索 /usr/lib。

于 2015-09-15T11:29:49.033 回答