VS自带有一个dumpbin工具,在要发布应用程序之前,可以使用dumpbin /dependents xx.exe来查看库依赖情况:
由此我们可以把依赖的动态库均打包一份防止缺少dll的问题发生,但是要尤其注意dll的版本问题,否则会导致问题二的发生。
上面说到该问题发生的原因在于应用程序依赖的当前环境下dll版本不对,根本上的解决方案就是在打包时就做好版本一致的检查。
这个是后来遇到的情况,其实原因与问题二相同,只是库之间的依赖传递不太容易发现,出现这个提示说明当前环境下的ucrtbase.dll是不兼容的,也就是版本不对,需要把开发环境下的ucrtbase.dll打包进去或者安装VS运行环境。
嗯还是用后者来的方便,一步到位,再加上Qt自带打包工具,Visual Studio和Qt的库依赖问题就基本解决了。
还有一点值得一提,因为有些系统级的动态库在不同版本OS下虽然名字相同但实现和依赖差别很大,如ws2_32.dll,因此在部署环境下不要随便使用开发环境的版本。
1、先下载Process Explorer软件;2、将要查找依赖项的程序运行起来,然后打开Process Explorer软件;
3、按ctrl+d或者菜单view-->Lower Pane View-->DLLs;
4、选中自己的运用程序,然后将鼠标定位到Process Explorer窗口的下方,然后按Ctrl+a,导出txt详细文件;
5、将其他内容全部清除,留下有路径的那部分内容;
6、新建一个excel文件,将这些内容复制到Excel文件中,将前几列清除,只留下路径一列,然后在前面一列填写xcopy,在后一列填写要复制的目标路径;
7、将excel文件中的内容复制到一个txt文件中,保存后,将后缀名改为.bat;
8、运行.bat文件,就可以把dll文件都复制出来了;
9、得到dll文件以后,将这些文件复制到exe文件的目录下,运行exe文件,然后在运行状态下选中所有的dll文件,按delete删除,不能删除的就是本程序必须依赖的库文件了。
注意:本步骤可能有争议,详细的结果自己尝试。
从编程的角度出发,库是指封装了各种功能的函数,用户在编写新程序时,无需再重新开发相关的功能。你可以把库理解成汽车的轮子,你造车时,无需重新制造一个轮子,直接从轮子厂商那儿购买使用,用你所有的精力去做好引擎(软件核心功能)和外壳(用户交互界面)。欢迎分享,转载请注明来源:内存溢出
评论列表(0条)