有时当我做一个小项目时,我不够小心,不小心添加了一个我不知道的DLL依赖项。当我将这个程序发送给朋友或其他人时,“它不工作”,因为“一些DLL”丢失了。这当然是因为程序可以在我的系统上找到DLL,但不能在他们的系统上找到。
是否有一种方法来扫描可执行文件的DLL依赖项或在“干净”的DLL自由环境中执行程序进行测试,以防止这些糟糕的情况?
有时当我做一个小项目时,我不够小心,不小心添加了一个我不知道的DLL依赖项。当我将这个程序发送给朋友或其他人时,“它不工作”,因为“一些DLL”丢失了。这当然是因为程序可以在我的系统上找到DLL,但不能在他们的系统上找到。
是否有一种方法来扫描可执行文件的DLL依赖项或在“干净”的DLL自由环境中执行程序进行测试,以防止这些糟糕的情况?
当前回答
有个程序叫"依赖" 如果你安装了cygwin,没有什么比ldd file.exe更简单的了
其他回答
有个程序叫"依赖" 如果你安装了cygwin,没有什么比ldd file.exe更简单的了
请参考SysInternal工具包从微软下面的链接, https://learn.microsoft.com/en-us/sysinternals/downloads/process-explorer
进入下载文件夹,以管理员权限打开Procexp64.exe。 打开查找菜单->“查找句柄或DLL”选项或Ctrl+F快捷方式。
最安全的事情是有一些干净的虚拟机,你可以在上面测试你的程序。在您希望测试的每个版本上,将VM恢复到其初始干净值。然后使用它的设置安装你的程序,看看它是否工作。
Dll问题有不同的面貌。如果你使用Visual Studio并动态链接到CRT,你必须分发CRT dll。更新你的VS,你必须分发另一个版本的CRT。仅仅检查依赖关系是不够的,因为你可能会错过这些。在我看来,在一台干净的机器上完全安装是唯一安全的解决方案。
如果您不想设置一个完整的测试环境并使用Windows 7,您可以使用XP-Mode作为初始的清理机器,并使用XP-More来复制VM。
从Visual Studio工具(VC\bin文件夹)可以帮助:
dumpbin /dependents your_dll_file.dll
DLL是在“调试模式”下编译然后部署的吗?
如果是这样,它可能依赖于dll的“D”版本。例如:
MSVCP140D.dll
VCRUNTIME140D.dll
如果DLL是在“发布模式”下构建的,这些将不是依赖项。D版本不附带Microsoft Visual c++ Redistributables。
事实是否如此,正如其他人指出的那样:
从Visual Studio:工具-> Visual Studio命令提示符。
在命令提示符中对DLL运行dumpbin / dependencies。