Что эквивалентно Linux ldd в Windows?


Ответы:


53

Вот Dependency Walker.

http://dependencywalker.com/


5
существует ли что-нибудь вроде ldd, только для командной строки? Ищу что-то, что я могу использовать из командной строки. Предпочитайте небольшую команду света, желательно без дополнительных DLL.
JM Becker

2
Похоже, что у него есть интерфейс командной строки: dependencywalker.com/help/html/hidr_command_line_help.htm
Дэниел А. Уайт

3
Синтаксис выглядит примерно так: depends.exe / c /oc:dependencies.csv /ot:dependencies.txt mydll.dll
Boinst

3
Dependency Walker работает хорошо, но это резкое отличие от простоты ldd (особенно если вы привыкли, что скрипт для инструмента использует его выходные данные и, скажем, автоматически с ним упаковывает задачи).
zxq9

2
Сбои в работе Windows 10.
mikemaccana

42

Команда dumpbinможет быть полезна для многих вещей, хотя в этом случае обходчик зависимостей, вероятно, будет немного более подробным.

dumpbin /dependents some.dll

Пример вывода:

C: \ Program Files (x86) \ Microsoft Visual Studio \ 2017 \ Community \ Team Tools \ Инструменты статического анализа> dumpbin / иждивенцы StanPolicy.dll

Дамп файла StanPolicy.dll

Тип файла: DLL

Изображение имеет следующие зависимости:

mscoree.dll

Резюме

    2000 .reloc
    2000 .rsrc
   1E000 .text

5
Это лучший вариант, если у вас установлена ​​Visual Studio.
sakra

36

или инструмент GNU:

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

1
Можно ли использовать objdump для отображения полного пути? Мне нужно что-то рекурсивно, и для этого требуется полный путь для каждой зависимой DLL
INS

3
objdump показывает только то, что содержит файл. Он не пытается выполнять поиск пути, как это lddделает.
jørgensen

26

PowerShell может это сделать

PS> Start-Process -PassThru calc.exe | Get-Process -Module

   Размер (K) Название модуля
   ------- ----------
       908 calc.exe
      1700 ntdll.dll
      1148 kernel32.dll
       432 KERNELBASE.dll
     13856 SHELL32.dll
           ...

6
Кажется, это работает только постольку, поскольку программа действительно находит dll - в случае сбоя список будет неполным.
01d55 04

12

Если вы используете wineне настоящую Windows, вы можете использовать WINEDEBUG=+loaddll wine <program>.


7
Разработка против Wine для Windows показалась мне настолько странной идеей, что мне пришлось попробовать (я в первую очередь ориентируюсь на Linux) ... и на самом деле она работает гораздо более гладко, чем я ожидал, для прототипирования. Очень-очень круто.
zxq9

Re: разработка с использованием Wine вместо Windows: обратите внимание, что то, что работает в Wine, не обязательно будет работать в реальной Windows. Я узнал об этом, когда забыл позвонить GdiplusStartup, и GDI + работал без проблем в Wine, а в Windows - нет. Я заметил эту ошибку только после того, как отладил программу в Wine, пытаясь затем запустить ее в Windows.
Руслан


8

Я предполагаю, что способ разработчика Windows сделать это - использовать dumpbin /dependents source.exe. Если у вас есть Visual Studio установлена , вы можете найти его здесь: C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\dumpbin.exe.


3
Жаль, что это не показывает, где находятся иждивенцы, поэтому вы можете точно увидеть, какие из них действительно используются во время выполнения :(.
rubenvb

@rubenvb Process Explorer из пакета SysInternals MS имеет нижнюю панель просмотра всех загружаемых двоичных библиотек DLL, включая их пути и поиск символов / dll.
Кевинф

7

Новые версии Git для Windows поставляются в комплекте с чем-то под названием Git BASH , которое имитирует многие полезные команды Unix, включая ldd.

Похоже, что он сообщает только о библиотеках, которые можно найти. Таким образом, вы можете использовать это, чтобы получить представление о том, где находятся используемые библиотеки, но не о том, какие из них отсутствуют.



0

Для Windows 10 с Visual Studio 2017 я захожу в строку поиска Windows и набираю:

«Командная строка разработчика для VS 2017» (специальный cmd.exe для разработчика Visual Studio)

Это позволяет получить доступ к DUMPBIN, который следует использовать с тегом \ IMPORTS. Например, в правильном каталоге:

DUMPBIN \ IMPORTS yourfile.exe (другие расширения тоже могут работать)

Для меня это список DLL и используемых функций.

Как вариант, вы можете использовать более подробный тег \ ALL.

см. объяснение DUMPBIN от Microsoft:

https://docs.microsoft.com/en-us/cpp/build/reference/imports-dumpbin?view=vs-2019

Пример (только с частью) контента, отправленного обратно командой

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.