在Windows上,相当于Linux的ldd是什么?

121

在Windows上,与Linux的ldd相当的是什么?


1
参见 https://dev59.com/uGs05IYBdhLWcg3wNPO7 - sercxjo
10个回答

69

dumpbin命令可以用于许多事情,尽管在这种情况下,依赖项查看器可能会更冗长。

dumpbin /dependents some.dll

示例输出:

C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Team Tools\Static Analysis Tools>dumpbin /dependents StanPolicy.dll

文件“StanPolicy.dll”的转储:

文件类型: DLL

图像具有以下依赖项:

mscoree.dll

概要

    2000 .reloc
    2000 .rsrc
   1E000 .text

8
如果您已安装了Visual Studio,那么这是最佳选择。 - sakra

64

14
有没有类似于ldd的东西,只能从命令行使用?我正在寻找可以在提示符下使用的东西。最好是一个小巧轻便的命令,最好不包含额外的DLL文件。 - J. M. Becker
2
看起来它有一个命令行界面:http://www.dependencywalker.com/help/html/hidr_command_line_help.htm - Daniel A. White
4
语法看起来像这样: depends.exe /c /oc:dependencies.csv /ot:dependencies.txt mydll.dll - Boinst
4
Dependency Walker的效果很好,但与ldd的简单性形成了强烈反差(特别是如果你习惯于编写脚本来使用工具并自动执行打包任务)。 - zxq9
5
Windows 10 上出现崩溃。 - mikemaccana

43

或者使用 GNU 工具:

i586-mingw32msvc-objdump -p  *.exe    | grep 'DLL Name:'

1
objdump能用来显示完整路径吗?我需要递归地查找,这需要每个依赖DLL的完整路径。 - INS
4
objdump只会展示文件中的内容,不会像"ldd"命令那样尝试进行路径查找。 - jørgensen

14
如果您正在使用的是 wine 而非真正的 Windows,您可以使用 WINEDEBUG=+loaddll wine <program>

7
使用Wine开发以针对Windows为目标的想法让我感到非常奇怪,因为我主要是面向Linux开发...但实际上,这对于原型设计的运行效果比我预期的要顺畅得多。非常、非常酷。 - zxq9
关于使用Wine进行开发而非Windows的问题:请注意,Wine上运行正常的程序未必在真正的Windows系统上也能正常运行。我曾经因为忘记调用GdiplusStartup函数,在Wine上使用GDI+没有任何问题,但是在Windows上却无法正常工作。只有在我在Wine上调试完程序后,尝试在Windows上运行时才发现了这个错误。 - Ruslan
我经常在Wine上测试东西,只是为了避免重启和更改操作系统。然而,在主要发布之前或者每次你做了一些感觉有点可疑的事情之前,尝试在Windows本机上测试是一个好习惯。 - Michael Macha

13

新版的Git在Windows上捆绑了一个名为Git BASH的东西,它模拟了许多有用的Unix命令,包括ldd。

看起来它只报告可以找到的库。因此,您可以使用它来概述所使用的库的位置,但不能确定缺失哪些库。


10

现在Cygwin中有一个ldd。如果你使用的是非常旧的Cygwin版本,你将需要使用cygcheck


2
是的,但它不是非常准确。 - Stef
到了2023年,它仍然不是非常准确——当我在一个为客户开发的MSYS2/UCRT可执行文件上反复运行时(该文件根本没有改变...),通常会列出35到40个DLL。偶尔我甚至会得到正确的41个依赖项。 - Andrew Henle

8

我猜在Windows开发者中,要做到这一点就要使用dumpbin /dependents source.exe命令。如果你已经安装了Visual Studio,你可以在这里找到它:C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\dumpbin.exe


3
很遗憾,这个并没有显示出依赖项的位置,因此你无法精确地看到哪些在运行时实际被使用了。 - rubenvb
@rubenvb,来自SysInternals MS套件的Process Explorer具有所有二进制文件加载的DLL的下方视图,包括它们的路径和符号/dll搜索。 - Kevin

7

4
对于使用Visual Studio 2017的Windows 10用户,可以在Windows搜索栏中输入“developer Command Prompt for VS 2017”(Visual Studio开发人员的特殊cmd.exe),以便使用带有/IMPORTS标记的DUMPBIN。例如,在正确的目录中运行以下命令:DUMPBIN /IMPORTS yourfile.exe(其他扩展名也可能适用)。这将列出所使用的DLL和函数。或者,您也可以使用\ALL标记,它更详细。请参阅Microsoft关于DUMPBIN的说明:https://learn.microsoft.com/en-us/cpp/build/reference/imports-dumpbin?view=vs-2019。以下是该命令返回内容的示例(仅部分内容):https://istack.dev59.com/qnGfT.webp

完整的示例如下:dumpbin /imports *.dll | find /i ".dll" - Mohammad Kanan
旧答案的非常好的补充! - Mohammad Kanan
这个答案可以作为对之前答案的评论,只是指出一些用户可能更喜欢使用开发人员命令提示符。 - sage

0
在Windows系统中,我通常使用cmder作为终端(而不是powershell/pwsh)。对于cmder,您只需输入“ldd my_executable.exe”即可看到预期的输出。
下载cmder链接:https://cmder.net/

2
那是与git bash捆绑在一起的ldd,在之前的回答中已经提到过。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接