使用QT生成exe应用程序后,其中依赖很多QT中的DLL库,但是在生成exe的时候,这些DLL 并没有添加到exe目录,在很多时候,我们都自己手动去复制需要的DLL,难免不会造成少dll的情况或者在其他的电脑上用不起。今天发现在qt安装目录中发现Qt 官方开发环境里自带了一个工具:windeployqtexe。可以自动把需要依赖的库文件都自动拷贝到exe目录中。
使用方法:
1打开QT的命令行工具,
2:进入到你生成exe目录,你可以把生成的exe拷贝到新建的一个目录中,比如c:\text中。
使用命令:1 cd c:\text
2 windeployqt testexe
然后你就可以看到你的目录中就有需要的dll和文件了,这时候你可以试试能否启动。
应用程序正常初始化错误
1 VC2003、VC2005、VC2008及其后续版本,对底层最基本的CRT、MFC、ATL库都进行了重构,为了避免不同版本的库引起冲突,重构后的库文件一般放在 C:\\windows\WinSxS 文件夹中,并用特定的文件夹\文件名称进行标识;
2 与VC6不同, VC2003、VC2005、VC2008及其后续版本,引入了manifest清单的概念,即应用程序编译后会同时生成对应的manifest文件,并将该manifest文件作为资源编译到dll或者exe中去。manifest文件实际上是一个XML格式的文本文件,里面记录了dll或exe中要引用的CRT、MFC、ATL库的版本和名称。VC6编译的应用程序对CRT、MFC、ATL的dll都是直接调用,而VC2003、VC2005、VC2008编译的程序都是先查询编译到资源中的manifest中的记录,然后按照记录提供的版本和名称去搜寻对应的CRT、MFC、ATL库以及随库发布的manifest文件,搜寻的路径包括当前目录、C:\\windows\WinSxS 等等,如果没有找到对应的库文件,则提示“应用程序正常初始化失败”;
3因此解决这个问题的办法就是:(a)用文本编辑器打开exe或dll对应的manifest文件,查看它引用的CRT、MFC、ATL库的版本;或者,用UltraEdit直接打开exe或者dll,从资源区中找到编译进去的manifest信息,找到它引用的CRT、MFC、ATL库的版本;或者,运行程序,当程序d出“应用程序正常初始化失败”对话框时,在桌面上右键点击“我的电脑”-“管理”-“事件查看器”-“系统”,双击查看其中的记录,可以看到出错的原因是因为缺少了某某版本的CRT、MFC、ATL库,记录下这个版本信息;(b)记录到的库的版本信息一般类似于“MicrosoftVC90DebugCRT”,之后到C:\\windows\WinSxS 或者VC200X的安装文件夹中搜索包含这个字符串的文件夹和文件,将搜索到的dll和manifest文件都拷贝到应用程序所在的文件夹中,其中,manifest文件必须重命名为“MicrosoftVC90DebugCRTmanifest”(这里以MicrosoftVC90DebugCRT为例),这样应用程序就可以正常运行了;(c)注意:库的manifest文件和dll要一同拷贝到应用程序根目录去,因为应用程序会将编译到内部的manifest信息与外部的manifest文件进行对比,之后才会对库的dll进行调用。如果只拷贝库的dll文件是没有用的;
4如果本机编译和运行程序都ok,但是将编译好的程序拿到其它机器上确无法运行,则多半也是这个原因。另外,如果提示"应用程序配置不正确",大多也是因为上面所说的CRT、MFC、ATL库版本与应用程序不匹配导致的,可以如法炮制进行解决;
用g了,或者中了病毒!那是一般出现这个现象有方面的,一是硬件,即内存方面有问题,二是软件,这就有多方面的问题了。
1、微软IE缓冲溢出漏洞引起
2、内存或虚拟内存地址使用冲突造成 程序的运行需要分配一定的内存地址给程序使用,当程序结束时释放留出空间让给新的程序使用,win是多任务的系统 有时前程序未结束 又有新的任务开始 到底要多少内存或虚拟内存来保证我们同时运行的工作任务呢也许win在这个问题上没弄好,所以有此错误常常发生,一般运行大型软件或多媒体后出现这种情况
3、劣质内存条也会出现这个问题
一般来说,内存出现问题的可能性并不大,主要方面是:内存条坏了、内存质量有问题,还有就是2个不同牌子不同容量的内存混插,也比较容易出现不兼容的情况,同时还要注意散热问题,特别是超频后。你可以使用MemTest 这个软件来检测一下内存,它可以彻底的检测出内存的稳定度。
假如你是双内存,而且是不同品牌的内存条混插或者买了二手内存时,出现这个问题,这时,你就要检查是不是内存出问题了或者和其它硬件不兼容。
4、微软WINDOWS系统的漏洞,
windows把内存地址0X00000000到0X0000ffff指定为分配null指针的地址范围,如果程序试图访问这一地址,则认为是错误。c/c++编写的程序通常不进行严格的错误检查,当采用malloc来分配内存而可供分配的地址空间不够的情况下返回null指针。但是代码不检查这种错误,认为地址分配已经成功,于是就访问0X00000000的地址,于是就发生内存违规访问,同时该进程被终止。
ASCII字符填充组成的pif文件时会出现以下情况:
一个非法的pif文件(用ascii字符'x'填充)至少要369字节,系统才认为是一个合法的pif文件,才会以pif的图标[pifmgrdll,0]显示,才会在属性里有程序、 字体、内存、屏幕”等内容。而且仅仅当一个非pif文件的大小是369字节时察看属性的“程序”页时,不会发生程序错误,哪怕是370字节也不行。当对一个大于369字节的非法pif文件察看属性的“程序”页时,Explorer会出错,提示:''指令引用的''内存。该内存不能为'read' ,问题出在pif文件的16进制地址:
0x00000181[0x87]0x00000182[0x01]和
0x00000231[0xC3]0x00000232[0x02]
即使是一个合法pif文件,只要改动这四处的任意一处,也会引起程序错误。而只
要把0x00000181和0x00000182的值改为[0xFF][0xFF],那么其它地址任意更改
都不会引起错误。
5、可能没有完全正确安装apache服务,且启动了它的原故; 把服务中的 OracleOraHomeXX>
1、首先找到这个工具,这个工具叫做“windeployqt”。它一般位于Qt安装目录下的mingw_XX\bin目录下,像我的目录就在C:\ProgramData\Qt\58\mingw53_32\bin。
此时,建议将整个目录直接加入系统环境变量,便于后续使用。
2、编译你的程序,注意必须是release版本。debug版本的貌似不行。
3、启动cmd,进入到你要发布的程序所在的目录,比如我的程序放在D:\Test目录下,就输入”cd /d d:\test”,记住里面一定要加”/d”的参数,否则将无法进入该目录。
4、确认你的程序是用Qt Creator哪个模式设计的,总共有2个模式,Qt Widgets Application和Qt Quick Application,不同模式下的参数命令是不一样的:
在Qt Widgets Application模式下
输入”windeployqt helloexe”命令,其中helloexe是我的程序名称。
将C:\Program Files (x86)\Windows Kits\10\bin\100150630\x64 目录下的rcexe 和rcdlldll 复制到C:\Program Files (x86)\Microsoft Visual Studio 140\VC\bin\amd64
如果qt版本是32bit的:
将C:\Program Files (x86)\Windows Kits\10\bin\100150630\x86 目录下的rcexe 和rcdlldll 复制到C:\Program Files (x86)\Microsoft Visual Studio 140\VC\bin
如果仍有此问题,卸载QT,重启电脑,安全卫士软件管家下载安装运行库合集后,重新安装QT软件解决此问题
请问你问的是qt智能家居程序出现的问题是什么吧,gt818触摸驱动移植问题。
根据中关村资料显示gt818触摸驱动移植问题是qt智能家居程序出现次数最多的问题。
以上就是关于如何解决QT程序发布时的dll依赖问题全部的内容,包括:如何解决QT程序发布时的dll依赖问题、哪位大神知道QT应用程序正常初始化失败0xc0150002这个错误 直接打开QT编译生成好的可执行程序就出现问题、QT打开程序错误等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)