стек ghci не может загрузить pthread, если он не работает от имени администратора - PullRequest
4 голосов
/ 29 сентября 2019

Когда я запускаю stack ghci в новом проекте, он не загружается:

$ stack new repro simple
Downloading template "simple" to create project "repro" in repro\ ...

(дополнительный вывод опущен, чтобы сделать вопрос более читабельным.)

$ cd repro/

$ stack ghci
Using main module: 1. Package `repro' component repro:exe:repro with main-is file: C:\Users\mark\Desktop\repro\src\Main.hs
Building all executables for `repro' once. After a successful build of all of them, only specified executables will be rebuilt.
repro> configure (exe)
Configuring repro-0.1.0.0...
repro> initial-build-steps (exe)
Configuring GHCi with the following packages: repro
GHCi, version 8.6.5: http://www.haskell.org/ghc/  :? for help
<command line>: user specified .o/.so/.DLL could not be loaded (addDLL: pthread or dependencies not loaded. (Win32 error 5))
Whilst trying to load:  (dynamic) pthread
Additional directories searched:   C:\\Users\\mark\\AppData\\Local\\Programs\\stack\\x86_64-windows\\msys2-20180531\\mingw64\\lib
   C:\\Users\\mark\\AppData\\Local\\Programs\\stack\\x86_64-windows\\msys2-20180531\\mingw64\\bin
   C://Users//mark//AppData//Local//Programs//stack//x86_64-windows//ghc-8.6.5//mingw//bin/
   C://Users//mark//AppData//Local//Programs//stack//x86_64-windows//ghc-8.6.5//mingw//bin/../lib/
   C://Users//mark//AppData//Local//Programs//stack//x86_64-windows//ghc-8.6.5//mingw//bin/../lib/gcc/x86_64-w64-mingw32/7.2.0/
   C:/Users/mark/AppData/Local/Programs/stack/x86_64-windows/ghc-8.6.5/mingw/bin/../lib/gcc/x86_64-w64-mingw32/7.2.0/
   C:/Users/mark/AppData/Local/Programs/stack/x86_64-windows/ghc-8.6.5/mingw/bin/../lib/gcc/
   C:/Users/mark/AppData/Local/Programs/stack/x86_64-windows/ghc-8.6.5/mingw/bin/../lib/gcc/x86_64-w64-mingw32/7.2.0/../../../../x86_64-w64-mingw32/lib/../lib/
   C:/Users/mark/AppData/Local/Programs/stack/x86_64-windows/ghc-8.6.5/mingw/bin/../lib/gcc/x86_64-w64-mingw32/7.2.0/../../../../lib/
   C:/Users/mark/AppData/Local/Programs/stack/x86_64-windows/ghc-8.6.5/mingw/bin/../lib/gcc/x86_64-w64-mingw32/7.2.0/../../../../x86_64-w64-mingw32/lib/
   C:/Users/mark/AppData/Local/Programs/stack/x86_64-windows/ghc-8.6.5/mingw/bin/../lib/gcc/x86_64-w64-mingw32/7.2.0/../../../
   C:\Windows\system32

Это на Windows 10 (x64). У меня есть другая машина с аналогичной конфигурацией ОС и версией стека, и на этой машине у меня нет проблем. Кажется, это проблема среды, но я не могу понять, что это такое.

Я работаю с Git Bash , и если я запускаю его с правами администратора, он работает:

$ stack ghci
Using main module: 1. Package `repro' component repro:exe:repro with main-is file: C:\Users\mark\Desktop\repro\src\Main.hs
Building all executables for `repro' once. After a successful build of all of them, only specified executables will be rebuilt.
repro> initial-build-steps (exe)
Configuring GHCi with the following packages: repro
GHCi, version 8.6.5: http://www.haskell.org/ghc/  :? for help
[1 of 1] Compiling Main             ( C:\Users\mark\Desktop\repro\src\Main.hs, interpreted )
Ok, one module loaded.
Loaded GHCi configuration from C:\\Users\\mark\\AppData\\Local\\Temp\\haskell-stack-ghci\\2524149e\\ghci-script
*Main>

Я много лет работал со стеком в Windows, и это первый раз, когда мне приходится работать в качестве администратора, и это действительно беспокоит меня. В чем может быть проблема, и как мне ее решить?

FWIW, это версия стека:

$ stack --version
Version 2.1.3, Git revision 0fa51b9925decd937e4a993ad90cb686f88fa282 (7739 commits) x86_64 hpack-0.31.2

Это та же версия, что и у меня на другой машине, гдепроблема не появляется.

Примеры здесь скопированы с запуска Git Bash , но проблема такая же, если я использую cmd.

1 Ответ

0 голосов
/ 08 октября 2019

Благодаря Федору Сойкину я смог отследить проблему.

Сводка

Предоставьте учетной записи пользователя Read & execute разрешения на pthread.dll.

Подробнее

Я не понял, почему моя новая машина показала эту проблему, в то время как другая машина с той же ОС и в основном той же самой установкой не имела никаких проблем.

При внимательном рассмотрении этооказалось, что на этой другой машине вообще не было pthread.dll файла .

Хотя на нем было довольно много копий pthread.h, и я полагаю, что это былодостаточно, чтобы включить Stack для создания кода.

На новой машине было pthread.dll в нескольких местах, включая подкаталог C:\Windows\System32\DriverStore, что подразумевает, что этот файл изначально прибылчерез драйвер, который использует новая машина, но старая машина не имела. Он также имеет копию pthread.dll в C:\Windows\System32, но этот файл был чрезвычайно заблокирован. Моя учетная запись пользователя не имела прав Read или Execute на файл, но я мог просматривать и изменять разрешения в режиме Администратор .

Я дал локальный Пользователи группируют Read & execute права на файл, после чего кажется, что все работает так же, как ранее на других моих машинах.

...