• Qt技巧:Win7下打包发布Qt程序(解释的比较清楚,把exe和dll伪装合并成一个文件)


    转自:http://www.stardrad.com/blog/qt-5%E7%A8%8B%E5%BA%8F%E5%9C%A8windows%E4%B8%8A%E7%9A%84%E5%8F%91%E5%B8%83/

    http://blog.163.com/qimo601@126/blog/static/1582209320132291718389/

    最近做了个qt的程序,但是发布程序比较困难,因为qt5有着比较多的dll,如下两篇详述了qt dll依赖库,以及如何查询自己工程所用的dll及打包发布的方法。

    QT 5的依赖链接库变得更多了,摸索许久,又查阅了一些资料,总结出以下QT 5程序所依赖的库。

    一、依赖库一览

    1.QT模块库

    1
    2
    3
    4
    Qt5Core.dll      #QT核心库
    Qt5Gui.dll       #QT Gui库
    Qt5Widgets.dll   #QT Widgets库,QT 5中GUI程序基本都需要此dll
    #还有其他程序用到的Qt5XXX.dll

    2.ICU(International Component for Unicode,Unicode工具)依赖库

    1
    2
    3
    icudt49.dll     
    icuin49.dll    
    icuuc49.dll   

    3.QT插件库,Qt新增,有点坑爹,路径必须正确

    1
    2
    3
    4
    5
    6
    # 根据不同的程序,需要不同的插件库
    #例如 QT_DIR/plugins/*/*.dll
    # 需要将 platforms/*.dll,accessible/*.dll的文件结构保留
    # 放在你所编译的程序所在目录
    plugins/platforms/qwindows.dll
    plugins/accessible/qtaccessiblewidgets.dll

    4.EGL依赖库,为OpenGL,OpenGL es提供接口

    1
    2
    libEGL.dll
    libGLESv2.dll

    5.mingw依赖库(msvc编译则无需这些库)

    1
    2
    3
    libgcc_s_sjlj-1.dll
    libstdc++-6.dll
    libwinpthread-1.dll

    6.VC运行库(mingw编译则无需这些库)

    1
    2
    msvcr110.dll(对应VS2012)
    msvcp110.dll

    二、文件结构

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    --platforms
           --qwindows.dll
           --*.dll
    --accessible
           --qtaccessiblewidgets.dll
           --*.dll
    --(other plugin folder)
           --*.dll
    --yourApp.exe
    --Qt5Core.dll
    --Qt5Gui.dll     
    --Qt5Widgets.dll
    --icudt49.dll     
    --icuin49.dll    
    --icuuc49.dll
    --libEGL.dll
    --libGLESv2.dll
    --libgcc_s_sjlj-1.dll(mingw)
    --libstdc++-6.dll(mingw)
    --libwinpthread-1.dll(mingw)
    --msvcr110.dll(msvc)
    --msvcp110.dll(msvc)

    三、总结

    说实话,QT 5虽然有了ICU,Open GL的支持,还有c++11的支持,但是由于依赖的DLL实在是太多,着实有点不太方便。一个mingw编译的qt gui程序,光是依赖dll就有30-50M的依赖库,确实很不爽啊。不过7z压缩后有10M左右,还可以接受

    Qt静态编译链接生成的exe文件,不需依赖七大姑八大姨的一堆dll,可以独立运行,发布很方便。但绝大多数用的都是Qt开源版本,如果用静态链接,会有些限制。那有没有办法即能享受静态编译的方便,又不受开源许可的限制呢?方法之一,就是用动态编译,然后把exe和需要的dll整合成一个文件,问题就解决了。
    具体步骤:
    一,先动态编译链接,生成exe文件
    二,找到依赖的dll文件
           这里,我们可以用Process Explore来获取所依赖的dll文件
          下载:
           http://pan.baidu.com/share/link?shareid=419262&uk=2701984065
           打开procexp.exe,通过菜单View==》Lower Pane View==》DLLs  勾选,显示dll窗口

            这里,我们以test.exe为例,
            在Qt环境下,将exe运行起来,在ProcessExplor中,找到就可以找到test.exe,选中,在下面就看到依赖的dll了。

           系统目录下的,一般不用关心,按Path排序,看Qt目录及mingw目录下的,将这些dll拷贝出来,单独放到一个目录下。
    三,打包
           打包工具,这里选用Enigma Virtual Box,
           下载:
            http://pan.baidu.com/share/link?shareid=419263&uk=2701984065
           安装,运行

           Enter Input File Name中,选择exe
           Enter Output File Name,输出文件名称
           点Add按钮,将前面准备好的dll文件,添加进来
           点Files Options,勾选Enable Files Virtualization和Compress files,OK
           最后,点Process,大告成。

    http://blog.csdn.net/jan5_reyn/article/details/39042175

  • 相关阅读:
    Oracle数据库5--数据库对象
    Oracle数据库4--多表关联
    Session
    cookie
    Servlet的部分response响应处理
    Servlet的部分request请求处理
    Linux部分命令
    Linux基础
    弹性布局
    animation 动画
  • 原文地址:https://www.cnblogs.com/findumars/p/5574264.html
Copyright © 2020-2023  润新知