7

我最近在运行 OS X 10.5.8 的 Intel MacBook 上 安装了(通过二进制安装程序)GHC 6.12 和Haskell Platform 2010.1.0.1 ,最初一切正常。编辑:我必须从源代码安装cabal、、alexhappy,但在之后,一切似乎都运行良好。但是,我发现如果我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_PATHDYLD_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? 或者,如果做不到这一点,一种使链接不会以其他巧妙方式中断的方法?

4

6 回答 6

9

当我安装 haskell-platform-2010.1.0.1-i386 并尝试编译 haskell 程序时,我在 MacOSX 10.5.8 上遇到了同样的错误。我的解决方案是在编译程序时将选项“-L/usr/lib”添加到 ghc。我相信这设法让链接器首先在 /usr/lib 中搜索 iconv 库,从而为我解决了这个问题。

于 2010-05-10T12:27:30.287 回答
1

我有点羞于承认这一点,但我已经通过如下咒语取得了一些成功:

LIBRARY_PATH=/usr/lib:/opt/local/lib cabal install --ghc-option="-L/usr/lib" SDL-gfx
于 2010-12-09T11:09:40.697 回答
1

我通过卸载 MacPorts 解决了我的问题。您可能只需卸载 MacPorts 版本的 libiconv 和任何依赖它的库就可以侥幸逃脱。

于 2010-08-30T15:31:04.077 回答
1

我修复了:

stack build --ghc-options "-L/usr/lib"
于 2016-06-24T08:47:42.420 回答
0

也许这可能会更好 cabal configure --extra-lib-dir=/usr/lib 它确实解决了 OSX Mountain Lion 上的问题

于 2013-10-18T12:39:50.387 回答
0

这很奇怪:afaik Platform 2010.1.0.1 在 OS X 10.5.8 上不起作用,这已经被包括我在内的几个人报告和验证,更有趣的是 -由你

于 2010-04-28T16:16:48.203 回答