Visual c++ 如何检查从VC生成的二进制exe的运行库类型++;

Visual c++ 如何检查从VC生成的二进制exe的运行库类型++;,visual-c++,msvcrt,Visual C++,Msvcrt,用于对现有生成(一组二进制文件、exe、dll、lib)进行故障排除 有没有一种方法,可以使用SDK或其他实用程序中的命令行工具快速检查编译对象文件所依据的运行时库类型 例如,给定一个.dll,很明显它是根据动态运行时编译的(但如果它是调试或发布版本,它仍然不明显) 而在.exe的情况下则更难(确定eithr是否使用了动态/静态和调试/发布) (我的意思是,不必打开VC++项目文件或查看NMAD/MSBug文件中使用的编译器选项)。 >代码> DimpBi/Advestus将允许您确定模块(EX

用于对现有生成(一组二进制文件、exe、dll、lib)进行故障排除

有没有一种方法,可以使用SDK或其他实用程序中的命令行工具快速检查编译对象文件所依据的运行时库类型

例如,给定一个.dll,很明显它是根据动态运行时编译的(但如果它是调试或发布版本,它仍然不明显)

而在.exe的情况下则更难(确定eithr是否使用了动态/静态和调试/发布)


(我的意思是,不必打开VC++项目文件或查看NMAD/MSBug文件中使用的编译器选项)。<> >代码> DimpBi/Advestus<代码>将允许您确定模块(EXE或DLL)是否依赖于Visual C++库DLL(以及哪些DL版本和调试器-调试或发布)。例如,用Visual C++ 2013…< /P> 使用

/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
<>当你静态链接VisualC++库时,通常无法判断是否连接了零售或调试库(一般你不能判断是否有任何VisualC++库链接到)。如果您的模块有PDB,您通常可以根据源文件信息和模块中存在的函数,使用该PDB来确定链接的内容


(两个注释:(1)我的Test.CPP文件是一个简单的C hello,World!程序。如果它动态链接其他Visual C++库,则<代码> DimpBi/Advestux/Cuff>也会报告。[D]代码> DuppB/依赖者< /代码>与DLL同样有效。

代码> Duppin < /C>和Link < /代码>不能用VisualStudio()分发。因此,它的效用仅限于开发商的目的;如何通过C或C++获得类似的查询?我可以使用OS libs来做这件事,但我需要这种工具,我可以分发一些消费模块。