首页 文章

未定义的符号引用'pthread_setname_np@@GLIBC_2.12' OpenSuse42.3上的Haskell堆栈错误

提问于
浏览
1

我已经安装了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命令并得到以下错误 -

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)

1 回答

  • 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) 引用 pthread_setname_np (可能还有其他 pthread_* 符号,但你没有链接 -pthread-lpthread 标志 .

    我不知道在GHC上添加这个标志的位置,但一旦你发现了,你的问题就会得到解决 .

相关问题