我最近在运行 OS X 10.5.8 的 Intel MacBook 上 安装了(通过二进制安装程序)GHC 6.12 和Haskell Platform 2010.1.0.1 ,最初一切正常。编辑:我必须从源代码安装cabal
、、alex
和happy
,但在那之后,一切似乎都运行良好。但是,我发现如果我cabal install
用来安装依赖于 MacPorts 库(例如,cabal install --extra-lib-dirs=/opt/local/lib --extra-include-dirs=/opt/local/include gd
)的包,则在 GHCi 中一切正常,但如果我尝试编译,则会出现错误
Linking test ...
Undefined symbols:
"_iconv_close", referenced from:
_hs_iconv_close in libHSbase-4.2.0.0.a(iconv.o)
"_iconv", referenced from:
_hs_iconv in libHSbase-4.2.0.0.a(iconv.o)
"_iconv_open", referenced from:
_hs_iconv_open in libHSbase-4.2.0.0.a(iconv.o)
ld: symbol(s) not found
collect2: ld returned 1 exit status
在谷歌搜索之后,我发现了一个讨论这个问题的 Haskell-cafe 长线程。结果似乎是MacPorts 安装了 libiconv 的更新版本,二进制接口与系统附带的版本略有不同。因此,如果您尝试与任何 MacPorts 库链接,MacPorts libiconv 也会被链接;并且由于基础库是为了链接不同版本的 libiconv 而构建的,所以事情就中断了。我已经尝试设置LD_LIBRARY_PATH
并DYLD_LIBRARY_PATH
添加更多标志来尝试让它/usr/lib
再次查看(例如 cabal install --extra-lib-dirs=/opt/local/lib --extra-include-dirs=/opt/local/include --extra-lib-dirs=/usr/lib --extra-include-dirs=/usr/include gd
),但都没有奏效。卸载 MacPortslibiconv
这不是一个真正的选择,因为我安装了一堆依赖于它的端口——包括我希望 Haskell 链接到的一些端口,比如gd2
.
从我在网上看到的情况来看,结果似乎真的是“你已经筋疲力尽了”:在使用 GHC 编译时,您无法链接到任何 MacPorts 库,而且似乎没有解决方案。但是,该线程是从 2009 年底开始的,所以我认为有人有可能有解决方案、变通方法、荒谬的 hack ......任何东西,真的。那么:有谁知道如何让 GHC 6.12 在链接到 MacPorts 库的同时链接到系统 libiconv? 或者,如果做不到这一点,一种使链接不会以其他巧妙方式中断的方法?