2015-02-24 1 views
1

Для устранения неполадок существующей сборки (набор двоичных файлов, exe, dll, lib).Как проверить тип библиотеки времени выполнения двоичного exe, сгенерированного из VC++

Есть ли способ, с помощью инструментов командной строки из SDK или другой утилиты, чтобы быстро проверить библиотеку времени выполнения. Объект был скомпилирован?

Например, с учетом .dll очевидно, что он был скомпилирован против динамического времени выполнения (но его все еще не очевидно, если это версия Debug или Release).

Хотя в случае с .exe сложнее (для определения eithr, если были использованы Dynamic/Static и Debug/Release).

(Я имею в виду, что не нужно открывать файлы проекта VC++ или смотреть параметры компилятора, используемые в файле nmake/msbuild).

ответ

2

dumpbin /dependents позволит вам определить, зависит ли модуль (EXE или DLL) от DLL библиотек Visual C++ (а также какие версии и варианты - отладка или выпуск) этих DLL-файлов). Например, с помощью Visual C++ 2013 ...

При компиляции с /MD, ваш модуль зависит от розничной msvcr120.dll:

>cl /MD /nologo test.cpp 
test.cpp 

>dumpbin /dependents test.exe | findstr dll 
    MSVCR120.dll 
    KERNEL32.dll 

При компиляции с /MDd, ваш модуль зависит от отладки msvcr120d .dll:

>cl /MDd /nologo test.cpp 
test.cpp 

>dumpbin /dependents test.exe | findstr dll 
    MSVCR120D.dll 
    KERNEL32.dll 

при компиляции с /MT или /MTd, ваш модуль не зависит от какой-либо CRT DLL:

>cl /MT /nologo test.cpp 
test.cpp 

>dumpbin /dependents test.exe | findstr dll 
    KERNEL32.dll 

>cl /MTd /nologo test.cpp 
test.cpp 

>dumpbin /dependents test.exe | findstr dll 
    KERNEL32.dll 

Когда вы статически связываете библиотеки Visual C++, как правило, невозможно определить, связаны ли библиотеки розничной продажи или отладки (в общем, вы не можете определить, были ли связаны библиотеки Visual C++). Если у вас есть PDB для вашего модуля, вы часто можете использовать его для определения того, что было связано, на основе информации исходного файла и функций, присутствующих в модуле.

(Два примечания: [1] Мой файл test.cpp был простой C Здравствуйте, программа World Если связаны другие библиотеки Visual C++ динамически, dumpbin /dependents будет также сообщать о них [2] dumpbin /dependents одинаково хорошо работает с DLL,!.. .)

+0

'dumpbin' и' link' не распространяются с Visual Studio (https://www.visualstudio.com/en-us/productinfo/2015-redistribution-vs), поэтому он будет иметь утилиту, ограниченную конец разработчика; Как получить похожие запросы с помощью C или C++? Я отлично использую ОС libs для этого, но мне нужен такой инструмент, который я могу распространять с некоторыми потребляющими модулями. –