haskell 除非以管理员身份运行,否则堆栈ghci无法加载pthread

bn31dyow  于 2023-11-18  发布在  其他
关注(0)|答案(2)|浏览(126)

当我在一个全新的项目上运行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上使用Stack很多年了,这是我第一次以管理员的身份运行,这真的让我很困扰。可能是什么问题,我该如何解决?
FWIW,这是堆栈版本:

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


这是我在另一台机器上使用的版本,其中没有出现问题。
这里的例子是从运行 Git Bash 复制的,但是如果我使用cmd,问题是一样的。

zy1mlcev

zy1mlcev1#

多亏了Fyodor Soikin,我才能找到这个问题。

摘要

给予您的用户帐户Read & executepthread.dll的权限。

详情

我不明白为什么我的这台新机器会出现这个问题,而另一台具有相同操作系统和基本相同设置的机器却没有任何问题。
经过仔细检查,发现另一台机器 * 根本没有pthread.dll文件 *。
不过,它确实有相当多的pthread.h副本,我想这足以让 Stack 构建代码。
新机器在几个地方有pthread.dll,包括一个C:\Windows\System32\DriverStore的文件夹,这意味着这个文件最初是通过新机器使用的驱动程序到达的,但旧机器没有。它在C:\Windows\System32中也有一个pthread.dll的副本,但是这个文件被异常地锁定了。我自己的用户帐户没有ReadExecute对这个文件的权限,但是我可以在 * 管理员 * 模式下查看和更改权限。
我给了本地 UsersRead & execute文件的权限,之后一切似乎都像以前在我的其他机器上一样工作。

yvgpqqbh

yvgpqqbh2#

以防其他人遇到这个问题,你不能改变phthread.dll的权限-另一个工作回合是采取pthread.dll的副本,并将其放置在“搜索的其他目录”之一-在我的情况下,我复制pthread.dll从C:\Windows\system32 => C:/tools/ghc-9.6.2/mingw/lib/clang/14.0.6
它提出了一个警告,要求系统管理员权限复制文件,但继续没有我输入任何额外的用户名/密码。复制有必要的权限,默认情况下,我现在可以运行“ghci”没有错误,我钉在公司笔记本电脑

相关问题