【发布时间】: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 来说太旧了。