【问题标题】:Link error on compiling ghc 7.10.3 on SLES11在 SLES11 上编译 ghc 7.10.3 时出现链接错误
【发布时间】:2016-02-15 15:00:29
【问题描述】:

我想在 SLES11 实例上编译 ghc 7.10.3,因为下载的二进制文件不起作用。现在我最后得到了链接错误:

/home/oswald/build/ghc-7.10.3/libraries/ghc-prim/dist-install/build/libHSghc-prim-0.4.0.0-8TmvWUcS1U1IKHT0levwg3-ghc7.10.3.so: undefined reference to `__sync_val_compare_and_swap_2'
/home/oswald/build/ghc-7.10.3/libraries/ghc-prim/dist-install/build/libHSghc-prim-0.4.0.0-8TmvWUcS1U1IKHT0levwg3-ghc7.10.3.so: undefined reference to `__sync_fetch_and_nand_2'

还有很多行。这些似乎是 GCC 原语。这台机器上安装的gcc版本是4.3.4,它有原语,但是我在文档中没有找到_2和_1结尾(据我了解,它使用可变参数列表)。

你知道如何解决这个问题吗?

【问题讨论】:

  • _2 后缀似乎是以字节为单位的操作数大小。我最好的猜测是,您的 gcc 默认配置为针对不支持这些操作的架构版本,例如 486。
  • 嗯,我的 gcc 文档说:“GCC 将允许长度为 1、2、4 或 8 个字节的任何整数标量或指针类型。”,所以它应该基本上采用任何基本数据类型。那么为什么要添加后缀呢?
  • GHC 不添加后缀。 (您可以查看libraries/ghc-prim/cbits/atomic.c。)测试__sync_val_compare_and_swap 是否适用于uint16_t,GHC 除外。
  • 是的,看来我的 gcc 对 ghc 来说太旧了。

标签: haskell gcc linker ghc


【解决方案1】:

好的,所以我确实在本地安装了更新的 gcc (4.9.3),然后 ghc 的编译成功。

【讨论】:

    猜你喜欢
    • 2015-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多