在工作中,领导让你负责某一项目的开发,你几经周折完成了开发,但在项目落地的过程中,你发现第三方总是不能成功地调用你提供的动态库。假如这是由你提供的动态库相关的依赖项缺失所导致的,那么我们该如何去确定缺失的是那些依赖项呢。下面这篇文章将介绍两个寻找缺失依赖项的方法。
举例说明
以文章(【C/C++】如何通过一个动态库来调用另一个动态库)中的工程为例子。该工程各项调用的逻辑是:test.exe调用test_dll.dll,test_dll.dll再调用test_Dll2.dll,test_Dll2.dll打印“ok_ok123456789”字符串。正常时,点击test.exe控制台窗口会显示:ok_ok123456789。若将test_Dll2.dll改成test_Dll2000.dll后,test.exe调用test_dll.dll失败。test_Dll2.dll被修改后,test_dll.dll找不到该依赖项,因此导致test.exe调用test_dll.dll失败。那么问题就来了,如果我们知道某动态库是因为缺失依赖项而不能成功被调用。这时,该如何确定缺失的依赖项是那些呢,后文将介绍两个用于确定缺失那些依赖项的方法。
方法一:通过“depends”工具发现缺失的依赖项
这个方案需要你下载一个“depends.exe”工具。以文章(【C/C++】如何通过一个动态库来调用另一个动态库)中的工程为例子。具体操作:用该工具打开你要测试的dll文件,然后找到红色框的地方(下图所示),字体显示红色的,其对应的dll文件可能就是缺失的文件,最后将缺失的文件补充即可。该工具可以在我的“资源”里面下载。
方法二:通过“命令提示符窗口”发现缺失的依赖项
这个方案的前提是已经安装了vs2019,操作:在命令提示符窗口中,进入 C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\bin\Hostx64\x86,再采用此命令:dumpbin -imports +dll所在路径+dll名称。如下图所示: