我最近安装了(来自二进制安装程序)GHC 6.12和运行OS X 10.5.8的英特尔MacBook上的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
经过一些谷歌搜索后,我发现a long Haskell-cafe thread正在讨论这个问题。结果似乎是MacPorts installs an updated version of libiconv,二进制接口与系统附带的版本略有不同。因此,如果您尝试链接任何MacPorts库,MacPorts libiconv也会被链接;由于基础库是为了链接不同版本的libiconv而构建的,因此事情就会中断。我尝试了setting LD_LIBRARY_PATH
and 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
),但都没有效果。卸载MacPorts libiconv
实际上不是一个选项,因为我安装了一堆依赖它的端口 - 包括我希望Haskell链接到的一些端口,如gd2
。
从我在网上看到的结果来看,结果似乎是“你被剔骨”:你在使用GHC编译时无法链接任何MacPorts库,似乎没有解决方案。然而,那个帖子是从2009年底开始的,所以我认为有人有可能有解决方案,解决方法,荒谬的黑客......真的。那么:是否有人知道如何让GHC 6.12在链接到MacPorts的库的同时链接到系统libiconv?或者,如果没有这样,一种使链接不破坏的方法以其他一些聪明的方式?
答案 0 :(得分:9)
当我安装haskell-platform-2010.1.0.1-i386并尝试编译haskell程序时,我在MacOSX 10.5.8上遇到了同样的错误。我的解决方案是在编译程序时向ghc添加选项“-L / usr / lib”。我相信这设法让链接器首先搜索/ usr / lib为iconv库解决了我的问题。
答案 1 :(得分:1)
我通过卸载MacPorts让我的问题消失了。你可以放弃卸载MacPorts版本的libiconv以及依赖它的任何库。
答案 2 :(得分:1)
我有点羞于承认这一点,但我已经取得了一些成功的咒语如下:
LIBRARY_PATH=/usr/lib:/opt/local/lib cabal install --ghc-option="-L/usr/lib" SDL-gfx
答案 3 :(得分:0)
这很奇怪:afaik Platform 2010.1.0.1 does not work on OS X 10.5.8,包括我在内的一些人已经报告并验证了这一点,更有趣的是 - by you!
答案 4 :(得分:0)
也许这可能会更好
cabal configure --extra-lib-dir=/usr/lib
它确实解决了OSX Mountain Lion上的问题
答案 5 :(得分:0)
我修复:
stack build --ghc-options "-L/usr/lib"