【发布时间】:2014-09-10 22:10:45
【问题描述】:
我正在尝试将 cabal 1.20 安装在 beaglebone black rev c(带有 debian wheezy arm)上。它在cabal install cabal-install 的后期失败了:
[75 of 76] Compiling Distribution.Client.Sandbox ( Distribution/Client/Sandbox.hs, dist/build/cabal/cabal-tmp/Distribution/Client/Sandbox.o )
[76 of 76] Compiling Main ( Main.hs, dist/build/cabal/cabal-tmp/Main.o )
Linking dist/build/cabal/cabal ...
/usr/lib/ghc/libHSrts.a(OSThreads.o): In function `getNumberOfProcessors':
(.text+0x8): multiple definition of `getNumberOfProcessors'
dist/build/cabal/cabal-tmp/cbits/getnumcores.o:getnumcores.c:(.text+0x0): first defined here
collect2: ld returned 1 exit status
cabal: Error: some packages failed to install:
cabal-install-1.20.0.3 failed during the building phase. The exception was:
ExitFailure 1
我看到 getNumberOfProcesses 已经定义了 haskell 运行时库(这可以解释冲突):
root@doghouse:/# nm /usr/lib/ghc/libHSrts.a | grep -B 3 Processors
nm: Disassembler.o: no symbols
nm: FrontPanel.o: no symbols
nm: LdvProfile.o: no symbols
U getAllocations
U getFullProgArgv
U getGCStats
U getNumberOfProcessors
nm: OldARMAtomic.o: no symbols
nm: Papi.o: no symbols
nm: Profiling.o: no symbols
nm: RetainerProfile.o: no symbols
nm: RetainerSet.o: no symbols
nm: RtsDllMain.o: no symbols
nm: Trace.o: no symbols
nm: 0Hash.o: no symbols
nm: 0Unpack.o: no symbols
nm: Dist.o: no symbols
nm: Global.o: no symbols
nm: GranSim.o: no symbols
nm: HLComms.o: no symbols
nm: LLComms.o: no symbols
nm: Pack.o: no symbols
nm: ParInit.o: no symbols
nm: ParTicky.o: no symbols
nm: Parallel.o: no symbols
nm: ParallelDebug.o: no symbols
nm: RBH.o: no symbols
nm: Sanity.o: no symbols
nm: EventLog.o: no symbols
--
OSThreads.o:
00000000 T forkOS_createThread
00000008 T getNumberOfProcessors
【问题讨论】:
-
我不太确定是什么原因造成的,但如果一切都失败了,您可以随时删除全局 GHC 库文件夹。始终在沙箱中构建这些可执行文件,然后将可执行文件移动到
/usr/bin或路径中的任何其他目录,这可能是一个好主意。 -
如果我删除全局 GHC 库文件夹,我将无法访问最重要的 RTS,不是吗?然后没有 Haskell 应用程序将编译或运行。还是我错过了什么?
-
差不多,但是 cabal install 会在你构建时引入任何你需要的东西。根据我的经验,处理haskell 库源的最佳方法是使用沙箱来构建所有内容(因为
cabal目前不能很好地处理同一库的不同版本,如果有的话)。您想要创建一个全局沙箱(包含最常见的库,例如base)并将其用作构建二进制文件的基础,并将您需要的任何特定库安装到二进制文件的沙箱中。你可以阅读更多关于 cabal 沙盒的内容,看看它能做什么。
标签: haskell debian cabal beagleboneblack