更正 "cannot open shared object file" 错误,但 Cygwin 中报告的文件不正确?

Correct "cannot open shared object file" error, but incorrect file reported in Cygwin?

在 Cygwin 中,我有一个可执行文件 linked 到共享库,为了 cygA.dllcygB.dll 问题(以及更多,但与此处无关)。据我所知,在 Cygwin 中应该使用 PATH 作为共享库路径,这是我已经设置 cygA.dll 的地方。然后我尝试 运行 可执行文件,期望找不到 cygB.dll 的错误。令我惊讶的是,我得到了 error while loading shared libraries: cygA.dll: cannot open shared object file: No such file or directory

使用 ldd 检查显示没有任何 .dll 条目,但 cygcheck 正确报告 cygcheck: track_down: could not find cygB.dll

我还有一个不同的可执行文件,具有相同的共享 link 到 cygA.dll,运行 没有问题。 将 cygA.dll 的路径放在 PATH 上后,我的新可执行文件也 运行 没有问题。因此 Cygwin 无法找到 cygB.dll,但错误地将 cygA.dll 报告为丢失的那个。对于大型项目来说,这可能会很痛苦……这是预期的行为,还是错误?在后一种情况下,什么是错误?我应该向 Cygwin 本身报告吗?

如果缺少二级 DLL,cygwin 只会看到加载一级 DLL 失败。 Windows 不传递信息

你可以使用 strace 获得正确的信息 例如:

$ cygcheck gm.exe
Found: D:\cygwin64\bin\gm.exe
D:\cygwin64\bin\gm.exe
  D:\cygwin64\bin\cygwin1.dll
    C:\WINDOWS\system32\KERNEL32.dll
      C:\WINDOWS\system32\ntdll.dll
      C:\WINDOWS\system32\KERNELBASE.dll
  D:\cygwin64\bin\cygGraphicsMagick-3.dll
    D:\cygwin64\bin\cygbz2-1.dll
...

$ mv cygbz2-1.dll cygbz2-1.dll-bk

 $ strace -o /tmp/gm.strace /usr/bin/gm.exe --help
D:/cygwin64/bin/strace.exe: error while loading shared libraries: ?: cannot open
 shared object file: No such file or directory

但是 windows 正确地提供了弹出信息: