xan*_*xan 0 haskell llvm ghc cabal windows-10
最近我试图安装llvm-general-3.5.1.0软件包大约一个星期.基本上我收到此错误:链接.我的情况完全相同.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"版本).如果库已经安装但是在非标准位置,那么您可以使用标志--extra-include-dirs =和--extra-lib-dirs =来指定它们的位置.
我真的想在我的Windows上使用这个软件包,但似乎没有任何工作(我尝试了所有的东西,如--extra-lib-dirs,并与MinGW和VS一起编译 - 同样的问题).
我不能接受它不会安装的事实.我的意思是,必须有一些方法来修复此cabal包中的Setup.hs.有没有人知道在这种情况下cabal有什么问题,我该如何尝试解决这个问题?我不知道cabal究竟是如何运作的,也许有这种知识的人会有想法?或者也许有一种方法可以做到这一点没有cabal?
好吧,我已经设法建立它,我认为,找到了问题的根源.
首先,构建步骤:
获得MinGW.我安装的MinGW有gcc 4.8.
获得32位MinGHC.
使用MinGW的gcc编译LLVM 3.5并将其安装在某处.
将MinGW安装目录的内容复制到MinGHC Install
Dir\ghc-7.10.2\mingw
,替换冲突文件.
在命令行中设置PATH,使其具有来自MinGHC的haskell工具集(我建议使用switch .bat脚本)和llvm-config.exe.
从hackage llvm-general
使用cabal fetch
或通过浏览器下载获取包源.
替换cc-options: -std=c++11
的行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.因此,在编译llvm-general时,ghc不能使用此gcc,因为它无法正确解析LLVM头.即使可以,它的链接器也不能使用gcc 4.8链接MinGW编译的LLVM库.这就是为什么cabal告诉你它无法找到LLVM库.我已经入侵了,Setup.hs
所以它不会寻找这些库,而是-lLLVMSomething
通过-pgml
ghc选项传递给链接器.这导致明确的错误消息:
ld.exe: ignoring libLLVMSupport.a ...
ld.exe: can't find -lLLVMSupport
Run Code Online (Sandbox Code Playgroud)所以,cabal
在真正找到这些库,但一度下探他们,因为他们无法联系到.
理想情况下,解决方案是更新stack/MinGHC使用的mingw分布.但作为一种解决方法,您可以用新的gcc替换旧的gcc.
最后-std=gnu++11
使用是因为当前的MinGW版本受此错误影响,这会阻止编译包的c ++位.哇,这还有很长的路要走.
归档时间: |
|
查看次数: |
883 次 |
最近记录: |