在缺少运行时库时,运行程序会报错

在windows平台下,有两种方式来排查依赖库
用VS的dumpbin命令
在cmd中输入如下命令:
"C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.16.27023\bin\Hostx64\x64\dumpbin.exe" /dependents "C:\Program Files (x86)\Nova Star\VPlayer\Bin\VPlayer.exe"
但该命令输出的依赖库不全,似乎只给出了exe依赖的一级动态库,无法打印出嵌套依赖的dll(也有可能我对该命令理解不全)
用Dependency Walker
1 下载Dependency Walker
2 将dll或exe拖到Dependency Walker,就能看到所依赖的dll。
3 视图解析(从图中的窗口1和2都能看到依赖的dll)

默认只显示dll名称,可以通过选择“Full Paths”显示全路径
![]()
从图中“1”能看到不同dll之间的依赖关系
从图中“2”能看到dll的显示信息,如:32位的还是64位的
如果拷贝进的dll架构不对(如:32位的程序拷贝了64位的程序),在运行时,会报错
![]()
报“无法定位程序输入点”的错
![]()
需要分两种情况:
库的版本:不对拷贝另一的版本的库
缺少另一动态库,如:上图中就是缺少ucrtbase.dll,把该库也拷贝过来就解决了
网友评论