【问题标题】:undefined reference to symbol 'pthread_setname_np@@GLIBC_2.12' Haskell Stack error on OpenSuse42.3OpenSuse42.3 上对符号 'pthread_setname_np@@GLIBC_2.12' 的未定义引用 Haskell Stack 错误
【发布时间】:2017-10-02 03:58:25
【问题描述】:

我已经安装了 haskell 堆栈,我正在尝试设置 ghc。堆栈版本是

stack --version
Version 1.5.1, Git revision 600c1f01435a10d127938709556c1682ecfd694e (4861 commits) x86_64 hpack-0.17.1

我已经更新了 ~/.stack/global-project/stack.yaml 如下

# This is the implicit global project's config file, which is only used when
# 'stack' is run outside of a real project.  Settings here do _not_ act as
# defaults for all projects.  To change stack's default settings, edit
# '/home/rajkumar/.stack/config.yaml' instead.
#
# For more information about stack's configuration, see
# http://docs.haskellstack.org/en/stable/yaml_configuration/
#
flags: {}
extra-package-dbs: []
packages: []
extra-deps: []
resolver: ghc-8.2.1

然后我运行堆栈设置命令并得到以下错误 -

  stack setup
  The GHC located at /home/rajkumar/.stack/programs/x86_64-linux/ghc-8.2.1/bin/ghc failed to compile a sanity check. Please see:

  http://docs.haskellstack.org/en/stable/install_and_upgrade/

  for more information. Exception was:
  Running /home/rajkumar/.stack/programs/x86_64-linux/ghc-8.2.1/bin/ghc /tmp/stack-sanity-check3048/Main.hs -no-user-package-db in directory /tmp/stack-sanity-check3048/ exited with ExitFailure 1

  [1 of 1] Compiling Main             ( /tmp/stack-sanity-check3048/Main.hs, /tmp/stack-sanity-check3048/Main.o )
  Linking /tmp/stack-sanity-check3048/Main ...

 /usr/bin/ld.bfd: /home/rajkumar/.stack/programs/x86_64-linux/ghc-8.2.1/lib64/ghc-8.2.1/rts/libHSrts.a(OSThreads.o): undefined reference to symbol 'pthread_setname_np@@GLIBC_2.12'
 /lib64/libpthread.so.0: error adding symbols: DSO missing from command line
 collect2: error: ld returned 1 exit status
`gcc' failed in phase `Linker'. (Exit code: 1)

【问题讨论】:

  • 请提供ldd --version的输出
  • ldd --version ldd (GNU libc) 2.26 版权所有 (C) 2017 Free Software Foundation, Inc. 这是免费软件;查看复制条件的来源。没有保修;甚至不考虑适销性或特定用途的适用性。由 Roland McGrath 和 Ulrich Drepper 撰写。
  • 所以问题可能是你需要在你的机器上安装GLIBC_2.12而不是2.26
  • 你是如何安装堆栈的?
  • 使用curl -sSL https://get.haskellstack.org/ | sh 中提到的命令docs.haskellstack.org/en/stable/README

标签: haskell opensuse haskell-stack


【解决方案1】:

所以问题可能是您需要在机器上安装 GLIBC_2.12 而不是 2.26

不,这不是的问题。 GLIBC-2.26 肯定会提供 pthread_setname_np@@GLIBC_2.12 符号(请参阅 this answer 以了解符号版本控制的工作原理)。

您可以像这样验证该符号在您的 GLIBC-2.26 中确实可用:

$ readelf -Ws /lib/x86_64-linux-gnu/libpthread.so.0 | grep pthread_setname_np
    89: 00000000000113c0   258 FUNC    GLOBAL DEFAULT   13 pthread_setname_np@@GLIBC_2.12
   704: 00000000000113c0   258 FUNC    GLOBAL DEFAULT   13 pthread_setname_np

(上述命令在 GLIBC-2.19 系统上执行,但在 GLIBC-2.26 系统上您将获得相同的输出)。

现在你的真正问题是什么:libHSrts.a(OSThreads.o) references pthread_setname_np(可能还有其他pthread_*符号,但你没有链接到-pthread-lpthread 标志。

我不知道在哪里添加这个标志到 GHC,但是一旦你发现了,你的问题就会解决。

【讨论】:

猜你喜欢
  • 2020-11-11
  • 1970-01-01
  • 1970-01-01
  • 2017-10-09
  • 2023-03-30
  • 2013-04-21
  • 2021-12-30
  • 2016-09-20
相关资源
最近更新 更多