【问题标题】:Multiple definitions of `getNumberOfProcessors` stop linkage with cabal-install`getNumberOfProcessors` 的多个定义停止与 cabal-install 的链接
【发布时间】: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


【解决方案1】:

我在运行 Raspbian 的 Raspberry Pi 上遇到了类似的问题。

为了解决这个问题,我修补了cabal-install.cabal 以将-DHAS_GET_NUMBER_OF_PROCESSORS 添加到cc-options 作为mentioned here

【讨论】:

    猜你喜欢
    • 2014-03-15
    • 1970-01-01
    • 2014-12-09
    • 1970-01-01
    • 1970-01-01
    • 2016-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多