最近我试图安装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究竟是如何工作的,也许有这方面知识的人会有想法?或者也许有一种方法可以在没有阴谋的情况下做到这一点?
答案 0 :(得分:6)
好的,我已经设法建立它,我认为,找到了问题的根源。
首先,构建步骤:
获取MinGW。我安装的MinGW有gcc 4.8。
获得32位MinGHC。
使用MinGW&#39的gcc编译LLVM 3.5并将其安装在某处。
将MinGW安装目录的内容复制到MinGHC Install
Dir\ghc-7.10.2\mingw
,替换冲突文件。
在命令行中设置PATH,使其具有haskell工具集 MinGHC(我推荐使用switch .bat脚本)和llvm-config.exe。
使用llvm-general
或获取cabal fetch
包源
从hackage通过浏览器下载。
将cc-options: -std=c++11
的{{1}}行替换为llvm-general.cabal
cc-options: -std=gnu++11
。
最后,cabal configure
和cabal build
应该有效。
我一直在改变我的构建环境,所以如果这对你不起作用,请告诉我,我可能会忘记一些事情。
现在让我们详细介绍。
实际上,我们认为是阴谋的错误。问题是stack
和MinGHC
(以及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 ++位。哇,这还有很长的路要走。