Cabal找不到外国图书馆

时间:2015-11-16 19:51:20

标签: haskell llvm windows-10 ghc cabal

最近我试图安装llvm-general-3.5.1.0包..大约一个星期。基本上我收到此错误:link。我的情况完全相同。 Windows 10,ghc 7.10.2,cabal 1.22.4.0。我用cmake从源代码安装了llvm 3.5.2,一切都很顺利。在llvm / lib目录中,我有* .lib文件(例如LLVMAnalysis.lib)。

但不知何故,cabal无法看到这些库并给出了这个令人沮丧的错误:

  

配置llvm-general-3.5.1.0 ...   setup.exe:缺少对外部库的依赖:   *缺少C库:LLVMLTO,LLVMObjCARCOpts,LLVMLinker,LLVMipo,   LLVMVectorize,LLVMBitWriter,LLVMCppBackendCodeGen,LLVMCppBackendInfo,   LLVMTableGen,LLVMDebugInfo,LLVMOption,LLVMX86Disassembler,   LLVMX86AsmParser,LLVMX86CodeGen,LLVMSelectionDAG,LLVMAsmPrinter,   LLVMX86Desc,LLVMX86Info,LLVMX86AsmPrinter,LLVMX86Utils,LLVMJIT,   LLVMIRReader,LLVMAsmParser,LLVMLineEditor,LLVMMCAnalysis,   LLVMMCDisassembler,LLVMInstrumentation,LLVMInterpreter,LLVMCodeGen,   LLVMScalarOpts,LLVMInstCombine,LLVMTransformUtils,LLVMipa,LLVMAnalysis,   LLVMProfileData,LLVMMCJIT,LLVMTarget,LLVMRuntimeDyld,LLVMObject,   LLVMMCParser,LLVMBitReader,LLVMExecutionEngine,LLVMMC,LLVMCore,   LLVMSupport   通常可以通过安装系统软件包来解决此问题   提供这些库(您可能需要“-dev”版本)。如果是图书馆   已安装但在非标准位置,您可以使用   flags --extra-include-dirs =和--extra-lib-dirs =指定它们的位置。

我真的想在我的Windows上使用这个软件包,但似乎没有任何工作(我尝试过像--extra-lib-dirs和MinGW和VS一样编译 - 同样的问题)。

我不能接受它不会安装的事实。我的意思是,必须有一些方法来修复此cabal包中的Setup.hs。有没有人知道在这种情况下cabal有什么问题,我该如何尝试解决这个问题?我不知道cabal究竟是如何工作的,也许有这方面知识的人会有想法?或者也许有一种方法可以在没有阴谋的情况下做到这一点?

1 个答案:

答案 0 :(得分:6)

好的,我已经设法建立它,我认为,找到了问题的根源。

首先,构建步骤:

  1. 获取MinGW。我安装的MinGW有gcc 4.8。

  2. 获得32位MinGHC。

  3. 使用MinGW&#39的gcc编译LLVM 3.5并将其安装在某处。

  4. 将MinGW安装目录的内容复制到MinGHC Install Dir\ghc-7.10.2\mingw,替换冲突文件。

  5. 在命令行中设置PATH,使其具有haskell工具集 MinGHC(我推荐使用switch .bat脚本)和llvm-config.exe。

  6. 使用llvm-general或获取cabal fetch包源 从hackage通过浏览器下载。

  7. cc-options: -std=c++11的{​​{1}}行替换为llvm-general.cabal cc-options: -std=gnu++11

  8. 最后,cabal configurecabal build应该有效。

  9. 我一直在改变我的构建环境,所以如果这对你不起作用,请告诉我,我可能会忘记一些事情。

    现在让我们详细介绍。

    实际上,我们认为是阴谋的错误。问题是stackMinGHC(以及Haskell Platform,我猜)使用相当旧的gcc - 4.6。这个gcc甚至有两个缺陷:

    • 它不支持-std=c++11,LLVM 3.5无法使用它构建。 因此,编译时ghc无法使用此gcc llvm-general,因为它无法正确解析LLVM头。
    • 即使可以,它的链接器也不能链接到编译的LLVM库 MinGW使用gcc 4.8。 是cabal告诉你的原因 无法找到LLVM库。我已经攻击了Setup.hs,所以它不会被攻击 查找这些库,但通过-lLLVMSomething-pgml传递给链接器 ghc选项。这导致了明确的错误消息:

      ld.exe: ignoring libLLVMSupport.a ...
      ld.exe: can't find -lLLVMSupport
      

    所以,cabal 实际上找到了这些库,但是因为它们无法链接而放弃它们。

    理想情况下,解决方案是更新stack / MinGHC使用的mingw分布。但作为一种解决方法,您只需用新的gcc替换旧的gcc即可。

    最后,使用-std=gnu++11,因为当前的MinGW版本是affected by this bug,这会阻止编译软件包的c ++位。哇,这还有很长的路要走。