2017-04-12 36 views
0

当我在我的计算机上编译工作的Haskell代码时,它抛出了体系结构x86_64的这个错误。我的朋友的计算机工作正常,它的架构相同。体系结构x86_64运行Haskell代码时,Haskell OSX iconv

$ ghc --make BoardMain.hs 
    Linking BoardMain ... 
    Undefined symbols for architecture x86_64: 
     "_iconv", referenced from: 
      _hs_iconv in libHSbase-4.9.1.0.a(iconv.o) 
     (maybe you meant: _hs_iconv, _base_GHCziIOziEncodingziIconv_iconvEncoding5_closure , _base_GHCziIOziEncodingziIconv_iconvEncodingzuloc_info , _base_GHCziIOziEncodingziIconv_iconvEncoding9_info , _hs_iconv_open , _base_GHCziIOziEncodingziIconv_iconvEncoding10_closure , _base_GHCziIOziEncodingziIconv_iconvEncoding11_info , _base_GHCziIOziEncodingziIconv_iconvEncoding7_closure , _base_GHCziIOziEncodingziIconv_iconvEncoding8_info , _base_GHCziIOziEncodingziIconv_iconvEncoding11_closure , _base_GHCziIOziEncodingziIconv_iconvEncoding8_closure , _base_GHCziIOziEncodingziIconv_iconvEncodingzuloc_closure , _hs_iconv_close , _base_GHCziIOziEncodingziIconv_iconvEncoding4_closure , _base_GHCziIOziEncodingziIconv_iconvEncoding10_info , _base_GHCziIOziEncodingziIconv_iconvEncoding3_closure , _base_GHCziIOziEncodingziIconv_iconvEncoding9_closure , _base_GHCziIOziEncodingziIconv_iconvEncoding2_closure , _base_GHCziIOziEncodingziIconv_iconvEncodingzuloc1_info , _base_GHCziIOziEncodingziIconv_iconvEncoding7_info , _base_GHCziIOziEncodingziIconv_iconvEncoding2_info , _base_GHCziIOziEncodingziIconv_iconvEncoding4_info , _base_GHCziIOziEncodingziIconv_iconvEncodingzuloc1_closure) 
     "_iconv_close", referenced from: 
      _hs_iconv_close in libHSbase-4.9.1.0.a(iconv.o) 
     (maybe you meant: _hs_iconv_close) 
     "_iconv_open", referenced from: 
      _hs_iconv_open in libHSbase-4.9.1.0.a(iconv.o) 
     (maybe you meant: _hs_iconv_open) 
     "_locale_charset", referenced from: 
      _localeEncoding in libHSbase-4.9.1.0.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) 
    `gcc' failed in phase `Linker'. (Exit code: 1) 
+2

这个问题根本与x86_64没有关系,而是(C)库版本控制问题。如果你是Google的“Haskell OSX iconv”,你会得到一些有趣的点击。也许从这个搜索中尝试一些事情;希望他们中的一个能够工作。 (如果是这样的话,你应该在这里写一个答案,告诉你哪种方法适用于你!) –

+0

编译时,如果我只是将“-L/usr/lib”附加到ghc中,它就是在没有这些iconv错误的情况下编译的。即$ ghc -L/usr/lib --make file.hs @DanielWagner – Aerron

回答

0

错误不是由于体系结构。该错误是由于可能与安装MacPorts的另一libiconv的是

的/ opt/local/lib目录作为/opt/local/lib/libiconv.*

虽然编译代码,它指的是与Mac OS X libiconv不同的Macports libiconv。我们需要对计算机使用OS X libiconv的这样,以确保它使用的OS X libconv这是

/usr/lib目录作为/usr/lib/libiconv.*

我们需要额外的库方向指令传递给小集团或GHC ..同时通过添加-L/usr/lib目录即

ghc -L/usr/lib --make file.hs 
cabal exec -- ghc -L/usr/lib --make BoardMain.hs 

你甚至可以尝试添加 额外LIB-DIR编译: - 在/ usr/lib 到我们的stack.yaml。请参阅this了解更多信息。

或者通过取消激活libconv /opt/local/lib如果您确定它们不打算在某些其他文件中断开某个链接。