Qt实例-UCF数据标注3之程序发布

来源:互联网 发布:获取php版本号 编辑:程序博客网 时间:2024/06/14 15:01

1.

当程序release之后,如何在其他没有安装Qt的电脑上运行?

首先把编译好的exe文件放置在一个新建文件夹下,然后在同目录下创建.bat文件。


%myexe.bat%C:\Qt\Qt5.8.0\5.8\msvc2015_64\bin\windeployqt.exe UCF_shadow_mark.exepause


接着运行批处理文件,把需要用到的dll文件自动复制到当前目录下。


但是,此时把此文件夹copy到老服务器上,运行exe文件,会提示缺少动态库。先后执行opencvworld300.dll->vcruntime140.dll->MSVCP140.DLL->运行C:\Qt\Qt5.8.0\vcredist\vcredist_msvc2015_x86.exe->api-ms-win-crt-runtime-l1-1-0.dll。

一开始运行的时候提示缺少opencvworld300.dll,放入之;运行,提示缺少vcruntime140.dll,放入;运行,提示缺少MSVCP140.DLL,放入;运行,提示无法定位程序输入点,后百度之,提示可以安装Qt目录下提供的vcredist_msvc2015_x86.exe,安装必要的运行库;运行,提示缺少api-ms-win-crt-runtime-l1-1-0.dll,放入,运行成功!

注:动态库都是处于system32文件夹下,而不是SysWOW64文件夹下。一开始的时候提示缺少vcruntime140.dll等库时,找到对应的SysWOW64文件夹下的库,结果最后提示“应用程序无法正常启动(0xc000007b),请单击“确定”关闭应用程序。”(下载Process Explorer程序,点击菜单栏中的view选中Lower Pane View中的DLLs,就可以查看程序运行时所需要的动态库及其地址)


2.

另外可以下载Dependency Walker,把左上角一级目录下显示为红色的dll,挨个复制到exe同目录文件夹下


运行Dependency Walker,输入exe,



依旧KERNEL32.DLL和SHELL32.DLL是红色的,在Process Explorer中发现这两个库的位置依旧是在system32文件夹下,没有调用当前目录下的dll文件。为什么没有调用呢?待解决。


3.

当在新的服务器上运行的时候,先安装vcredist\vcredist_msvc2015_x86.exe,之后依次提示如下




而libpng16.dll和zlib.dll在自己电脑上和老服务器上位于C盘下的Anaconda下的C:\Users\Administrator\Anaconda3\Library\bin下,而新服务器没有默认安装,而是装到D盘,依次放入这3个动态库,问题解决。而老服务器缺少的几个文件,新服务器上却位于Anaconda和systme32下,见下图:






4.总结

第一步:安装vcredist_msvc2015_x86.exe,这个库会在system32文件夹下放入很多的api-ms-win-crt开头的库。

第二步:放入opencv300.dll

第三步:运行时缺少什么库就放入什么库,主要借助Process Explorer程序找到库的地址。 


参考网址:

http://blog.sina.com.cn/s/blog_66cd08930102w74s.html【qt5.5程序打包发布以及依赖】

https://www.cnblogs.com/lawliet12/p/6916410.html【QT出现应用程序无法正常启动0xc000007b的错误】

http://tieba.baidu.com/p/5014423968【QtCreator缺少api-ms-win-crt-runtime-l1-1-0.dll】






















































原创粉丝点击