hello world!
分类: C/C++
2013-09-08 00:55:51
Qt 5 打包发布64位程序
运行错误 Failed to load platform plugin “windows”
最近,要用Qt 5 + MSVC2012 64bit,打包发布一个程序,先编译了一个测试程序在打包时通过Dependency Walker 查看发布程序所依赖的动态库文件。如下图所示:
Fig1编译环境
程序打包时,将所需的dll文件:icudt51.dll、icuin51.dll、icuuc51.dll、libGLESv2.dll、IEShims.dll、Qt5Core.dll、Qt5Gui.dll、Qt5Widgets.dll。如果增加了图片等不还需要将Qt\Qt5.1.0\5.1.0\msvc2012_64\plugins目录下的相关插件文件夹直接拷贝进去。如需要程序中需要显示图片则需将imageformats文件夹拷贝至程序目录。
Fig2 Dependency查看依赖库
用Dependency查看依赖库,已无缺失dll。但在运行时不能独立运行,用debug版独立运行时会出现下面错误。Failed to load platform plugin “windows”. Available platforms。
Fig3 Failed to load platform plugin “windows”
看这问题提示是确少某个动态的dll文件,但是不知道是哪个,后来通过一翻折腾,是缺少libEGL.dll(release版)/ libEGLd.dll(debug版)。
libEGL为何方大神呢?
libEGL为包裹库,EGL是 Khronos的渲染API(如OpenGL ES和OpenVG)与底层native平台窗口系统(如桌面版Linux中的X Window,MS-Windows中的GDI,Android中的Frame Buffer等)交互的接口。EGL负责处理图形上下文的管理、surface与buffer的绑定、渲染同步机制和2D/3D混合渲染。它也支持多媒体系统中的视频帧纹理贴图。也就是说,使用EGL创建图形上下文环境(graphics contexts)和创建用于渲染绘制的surface,然后客户端 APIs(clients API,如OpenGL Es或OpenVG)可以在surface上进行图形绘制,再使用native的平台渲染API将结果绘制到同步屏幕上 。EGL底层真正实现的API函数指针将存放在egl_t结构体中,上层的EGL调用都将通过egl_t的结构体中的函数指针最终调用到下层的EGL实现。
By Embedded Li