有时当我做一个小项目时,我不够小心,不小心添加了一个我不知道的DLL依赖项。当我将这个程序发送给朋友或其他人时,“它不工作”,因为“一些DLL”丢失了。这当然是因为程序可以在我的系统上找到DLL,但不能在他们的系统上找到。
是否有一种方法来扫描可执行文件的DLL依赖项或在“干净”的DLL自由环境中执行程序进行测试,以防止这些糟糕的情况?
有时当我做一个小项目时,我不够小心,不小心添加了一个我不知道的DLL依赖项。当我将这个程序发送给朋友或其他人时,“它不工作”,因为“一些DLL”丢失了。这当然是因为程序可以在我的系统上找到DLL,但不能在他们的系统上找到。
是否有一种方法来扫描可执行文件的DLL依赖项或在“干净”的DLL自由环境中执行程序进行测试,以防止这些糟糕的情况?
当前回答
有个程序叫"依赖" 如果你安装了cygwin,没有什么比ldd file.exe更简单的了
其他回答
有个程序叫"依赖" 如果你安装了cygwin,没有什么比ldd file.exe更简单的了
要查看Windows中的“。dll”依赖项和其他有用信息-我可以强烈推荐CFF资源管理器(https://ntcore.com/?page_id=388),它是免费的,非常有用。您可以查看“。dll”文件和许多其他函数的“导入”和“导出”依赖项。而且它有一个GUI -所以你不必使用cli…
In the past (i.e. WinXP days), I used to depend/rely on DLL Dependency Walker (depends.exe) but there are times when I am still not able to determine the DLL issue(s). Ideally, we'd like to find out before runtime by inspections but if that does not resolve it (or taking too much time), you can try enabling the "loader snap" as described on http://blogs.msdn.com/b/junfeng/archive/2006/11/20/debugging-loadlibrary-failures.aspx and https://msdn.microsoft.com/en-us/library/windows/hardware/ff556886(v=vs.85).aspx and briefly mentioned LoadLibrary fails; GetLastError no help
警告:我过去一直在用gflag搞砸我的窗户,让它爬到它的膝盖,你已经被预先警告过了。
注意:“Loader snap”是每进程的,所以UI enable不会一直检查(使用cdb或glfags -i)
DLL是在“调试模式”下编译然后部署的吗?
如果是这样,它可能依赖于dll的“D”版本。例如:
MSVCP140D.dll
VCRUNTIME140D.dll
如果DLL是在“发布模式”下构建的,这些将不是依赖项。D版本不附带Microsoft Visual c++ Redistributables。
事实是否如此,正如其他人指出的那样:
从Visual Studio:工具-> Visual Studio命令提示符。
在命令提示符中对DLL运行dumpbin / dependencies。
从Visual Studio工具(VC\bin文件夹)可以帮助:
dumpbin /dependents your_dll_file.dll