久久精品精选,精品九九视频,www久久只有这里有精品,亚洲熟女乱色综合一区
    分享

    關于在windows下部署發布QT程序的總結

     torony 2016-01-31

    轉載  關于在windows下部署發布QT程序的總結 收藏

    以下包括了部分網上收集的,以及qt幫助里的內容(Deploying an Application on Qt/Windows)

    首先,打開windows控制臺,然后,找到vs安裝目錄下的bin里,執行 vcvars32.bat 這個腳本。執行完之后,vs需要的所有環境變量就已經設置好了。

    然后,做下面的操作:

    我的環境是QT 4.3.3 + mingw32-make

    部署發布QT程序有兩種方法:
    第一種,靜態編譯,可生成單一的可執行文件。
    第二種,動態編譯,需同時附上需要的dll文件。

    一、靜態編譯

    1 編譯QT。
    要靜態編譯,首先要求QT是靜態編譯過的。在QT目錄下執行:

    configure.exe -static -release
    make sub-src

    就可以編譯出靜態庫。如果只是用來分發程序,也可以mingw32-make release sub-src只編譯一個靜態庫。
    這個過程需要1-2個小時。QT目錄會變成1.8G左右。注:mingw32-make和make是一樣的。

    如果用VC2005平臺,在編譯Qt的時候,configure.exe -static -platform win32-msvc2005
    然后nmake sub-src或者nmake release sub-src完成靜態編譯。

    2 編譯程序。
    然后到你自己的程序目錄下執行:

    make clean
    qmake -config release
    make

    這時會得到一個非常大的可執行程序,但也會有一個重要的問題,就是圖片文件顯示不出來。
    按照QT幫助的說法,QT里的jpeg,gif等圖片的支持都是以插件的形式存在的,現在我們還沒有包含任何插件。

    3 加入插件

    在main.cpp里:
    #include <QApplication>
    #include <QtPlugin> //這個

    Q_IMPORT_PLUGIN(qjpeg) //這個
    Q_IMPORT_PLUGIN(qgif) //這個

    int main(int argc, char *argv[])
    {
    QApplication app(argc, argv);

    return app.exec();
    }

    在.pro里加入:
    QTPLUGIN += qjpeg qgif
    CONFIG += static

    QT的幫助里就做到這里,但我編譯程序時出錯如下:
    release/main.o(.text+0×1c9):main.cpp:
    undefined reference to `qt_plugin_instance_qgif()’
    undefined reference to `qt_plugin_instance_qjpeg()’

    經過長時間研究,發現了解決問題的辦法:

    4 加入LIBS
    在.pro中加入:
    LIBS += C:/Qt/4.3.3/plugins/imageformats/libqgif.a
    LIBS += C:/Qt/4.3.3/plugins/imageformats/libqjpeg.a
    如果QT靜態編譯正確的話,你應該上面這個目錄下看到這兩個文件libqgif.a和libqjpeg.a (據說以前的QT版本也可能是.lib或.o文件)

    這時已經可以正常編譯運行了。但還是需要mingwm10.dll才能運行。

    5 解決MinGW的mingwm10.dll依賴問題

    在Makefile.release里找到:

    LFLAGS = -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc -static -Wl,-s -Wl -mthreads -Wl, -subsystem,windows

    刪除其中的”-mthreads”

    quote:
    一般只有用到threads的時候才用到mingwm10.dll,我們通常遇到的”缺少mingwm10.dll”問題,可 以在程序qmake生成makefile.release文件后刪除”-mthreads”參數即可,一般在 “LFLAGS”后面。當然,這只是臨時解決方案,每次都要手動修改,也可以在編譯QT前先修改qmake.h,不過不推薦這種方法。其實, mingwm10.dll也就十多K,每次發布程序時一起打包也無所謂。
    更多信息可以參考:
    http://lists./qt-interest/2006-08/thread00942-0.html
    http://lists./qt-interest/2005-10/thread00381-0.html#msg00553

    這時編譯同樣得到一個非常大的可執行程序(我寫的這個貪吃蛇一共500多行,生成的exe有8M)。用AspPack壓縮一下。就可以發給用戶了(這時是2.6M)。
    quote: “這樣編譯出來的程序比較大,可以先用strip命令去掉程序里面一些無用信息后,用ASPack或者UPX之類的壓縮加殼軟件壓縮一下,兩者的壓縮率基本都達到30%多一點,壓縮效果還是很明顯的?!?/p>


    二、動態編譯

    動態編譯就很容易了。用QT的默認安裝,把生成的release下的exe文件,和下面幾個核心文件放在一個文件夾里:

    MINGWM10.DLL
    QTGUI4.DLL
    QTCORE4.DLL

    VC2005編譯程序運行時需要的幾個dll文件
    Microsoft.VC80.CRT.manifest 位于x:\Program Files\Microsoft Visual Studio 8\VC\redist\x86\\Microsoft.VC80.CRT
    msvcm80.dll
    msvcp80.dll
    msvcr80.dll
    QtCore4.dll
    QtGui4.dll

    這樣就可以運行了。但圖片文件還是可能顯示不出來,解決辦法:
    把程序文件夾里,建立一個imageformats目錄(必須是這個名字),把qt目錄下的plugin/imageformats目錄下對應的dll文件copy過去。這樣動態連接就完成了。

    注:可以用微軟的Dependency Walker tool工具,就是一個depends.exe的程序,來查看一個exe文件跟哪些dll關聯。

    注:需要在完全沒有裝QT的系統上測試發布的程序有沒有DLL依賴問題。

      本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發布,不代表本站觀點。請注意甄別內容中的聯系方式、誘導購買等信息,謹防詐騙。如發現有害或侵權內容,請點擊一鍵舉報。
      轉藏 分享 獻花(0

      0條評論

      發表

      請遵守用戶 評論公約

      類似文章 更多

      主站蜘蛛池模板: 中文字幕在线国产精品| 99精品国产中文字幕| 依依成人精品视频在线观看| 免费午夜无码片在线观看影院| 成年女人喷潮免费视频| 精品无码一区二区三区AV| 成人免费AA片在线观看| 中文成人无码精品久久久| 国产99青青成人A在线| 亚洲AV永久纯肉无码精品动漫| 免费现黄频在线观看国产| 精品久久久久久无码国产 | 国产精品点击进入在线影院高清| 国产成人精品999在线观看| 免费网站看V片在线毛| 国产成人午夜福利在线播放| 成人午夜看黄在线尤物成人| 护士张开腿被奷日出白浆| 久草热久草热线频97精品| 二区三区亚洲精品国产| 国产果冻豆传媒麻婆精东| 人妻丝袜AV中文系列先锋影音| 亚洲综合在线一区二区三区 | 国产免费一区二区视频| 欧美午夜成人片在线观看| 精选国产av精选一区二区三区 | 福利一区二区在线播放| 国产偷窥熟女高潮精品视频| 亚洲人成小说网站色在线| 精品无人区一区二区三区| 亚洲色大成永久WW网站| 深夜在线观看免费av| 英语老师解开裙子坐我腿中间| 少妇私密推油呻吟在线播放| 婷婷五月综合丁香在线| 精品国产黑色丝袜高跟鞋| 被公疯狂玩弄的年轻人妻| 国产中文字幕日韩精品| WWW夜片内射视频在观看视频| 无码AV无码天堂资源网影音先锋| 人人人澡人人肉久久精品|