更正 "cannot open shared object file" 错误,但 Cygwin 中报告的文件不正确?
Correct "cannot open shared object file" error, but incorrect file reported in Cygwin?
在 Cygwin 中,我有一个可执行文件 linked 到共享库,为了 cygA.dll
和 cygB.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 正确地提供了弹出信息:
在 Cygwin 中,我有一个可执行文件 linked 到共享库,为了 cygA.dll
和 cygB.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 正确地提供了弹出信息: