неопределенная ссылка на символ 'pthread_setname_np@@GLIBC_2.12' Ошибка стека Haskell в OpenSuse42.3

Я установил стек 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)

person Rajkumar Natarajan    schedule 02.10.2017    source источник
comment
Пожалуйста, предоставьте вывод ldd --version   -  person selalerer    schedule 02.10.2017
comment
ldd --version ldd (GNU libc) 2.26 Copyright (C) Free Software Foundation, Inc., 2017 г. Это бесплатное программное обеспечение; см. источник условий копирования. НЕТ гарантии; даже не для КОММЕРЧЕСКОЙ ПРИГОДНОСТИ или ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЕННОЙ ЦЕЛИ. Авторы сценария Роланд МакГрат и Ульрих Дреппер.   -  person Rajkumar Natarajan    schedule 02.10.2017
comment
Так что, возможно, проблема в том, что вам нужно установить GLIBC_2.12 на вашу машину, а не 2.26   -  person selalerer    schedule 02.10.2017
comment
Как ты установил стек?   -  person Sibi    schedule 02.10.2017
comment
с помощью команды curl -sSL https://get.haskellstack.org/ | sh, как указано в docs.haskellstack.org/en/stable/README   -  person Rajkumar Natarajan    schedule 02.10.2017
comment
Я пытался понизить glib с версии 2.26 до 2.12, но безуспешно :(   -  person Rajkumar Natarajan    schedule 03.10.2017


Ответы (1)


Так что, возможно, проблема в том, что вам нужно установить GLIBC_2.12 на вашу машину, а не 2.26.

Нет, проблема не в этом. GLIBC-2.26, безусловно, предоставляет символ pthread_setname_np@@GLIBC_2.12 (см. этот ответ, чтобы понять, как работает управление версиями символов).

Вы можете убедиться, что символ действительно доступен в вашем 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, но как только вы это узнаете, ваша проблема будет решена.

person Employed Russian    schedule 03.10.2017
comment
Для этого я создал задачу github.com/commercialhaskell/stack/issues/3472. - person Rajkumar Natarajan; 04.10.2017
comment
Спасибо Employed Russion за ваше любезное предложение. Эта проблема устранена. - person Rajkumar Natarajan; 05.02.2018