簡體   English   中英

陰謀集團找不到外國圖書館

[英]Cabal can't find foreign libraries

最近,我試圖安裝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 ... 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進行了編譯-相同的問題)。

我不能接受它不會安裝的事實。 我的意思是,必須有某種方法可以從該集團軟件包中修復Setup.hs。 有誰知道在這種情況下陰謀集團可能出什么問題,我該如何解決呢? 我不知道陰謀集團到底是如何運作的,也許知道這些的人會有想法嗎? 也許有一種方法可以不使用陰謀集團?

好的,我已經設法構建它,並且我認為找到了問題的根源。

首先,建立步驟:

  1. 獲取MinGW。 我安裝的MinGW具有gcc 4.8。

  2. 獲取32位MinGHC。

  3. 用MinGW的gcc編譯LLVM 3.5並將其安裝在某個地方。

  4. 將MinGW安裝目錄的內容復制到MinGHC Install Dir\\ghc-7.10.2\\mingw ,替換沖突文件。

  5. 在命令行中設置PATH,以使其具有MinGHC的haskell工具集(我建議使用switch .bat腳本)和llvm-config.exe。

  6. 使用cabal fetch或通過黑客從瀏覽器下載來獲取llvm-general軟件包源。

  7. llvm-general.cabal cc-options: -std=c++11行替換為cc-options: -std=gnu++11

  8. 最后, cabal configurecabal build應該工作。

我已經多次更改了構建環境,所以如果對您不起作用,請告訴我,我可能忘記了一些東西。


現在讓我們詳細介紹。

實際上,我們認為這不是陰謀的錯誤。 問題在於stackMinGHC (我猜是Haskell Platform )都使用了相當老的gcc -4.6。 這個gcc甚至有兩個缺陷:

  • 它不支持-std=c++11並且不能使用它構建LLVM 3.5。 因此,編譯llvm-general時,ghc無法使用此gcc,因為它無法正確解析LLVM標頭。
  • 即使可以,其鏈接器也無法鏈接到MinGW使用gcc 4.8編譯的LLVM庫。 就是cabal告訴您找不到LLVM庫的原因。 我已經破解了Setup.hs以便它不會查找這些庫,而是通過-pgml ghc選項將-lLLVMSomething傳遞給鏈接器。 這導致清除錯誤消息:

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

因此, cabal實際上找到這些庫,但一度下探他們,因為他們無法聯系到。

理想情況下,解決方案是更新堆棧/ MinGHC使用的mingw分布。 但是,作為一種解決方法,您可以將舊的gcc替換為新的gcc。

最后,使用-std=gnu++11是因為當前的MinGW版本受此bug的影響,該bug阻止了程序包的c ++位的編譯。 ew,那是很長的路要走。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM