成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Windows下 Qt 靜態編譯連接

移動開發
本文介紹的是Windows下 Qt 靜態編譯連接,Qt的靜態和動態,前面的內容也有所介紹,先來看本文的靜態編譯。

關于Windows下 Qt 靜態編譯連接,似乎一直沒有靜態編譯Qt的需求:一不在沒有管理員權限的機器上使用,二不制作綠色軟件,三動態編譯工作得很好,再配合 nsis 制作一個安裝包,有什么必要靜態編譯呢?

但論壇中似乎總是不停有人問到靜態編譯的問題,似乎遇到問題的人挺多,用百度或google搜索"Qt靜態編譯"也能搜到相當多的內容。

正好利用周末時間,自己嘗試編譯一下,順便整理一下,看看到底會發生什么(盡管以后還是用動態編譯)。

沒特殊說明的話,以下討論的是 MSVC2008 下的情況:

靜態編譯

或許有兩個層次:

編譯出的程序不依賴 QtCore4.dll、QtGui4.dll 等 Qt 的靜態庫

編譯出的程序不依賴 msvcr90.dll、msvcp90.dll 等 C、C++ 的運行庫

編譯Qt

Qt 默認是動態編譯的,下載Qt的源碼,解壓,而后運行(當系統中有多套編譯環境時,需要通過platform參數指定所用編譯環境 -platform win32-msvc)

configure然后運行 nmake 就進入漫長的等待了,結束后Qt編譯就完成了。

運行 configure -h 可以得到詳細的幫助信息,包括默認啟用哪些參數等。

  1. *  -shared ............ Create and use shared Qt libraries.     
  2.  -static ............ Create and use static Qt libraries. 

如果我們要靜態編譯,只需要在 configure 后添加 -static 就行了。當然根據個人喜好,你可能會添加更多的參數,比如 -no-qt3support 禁用 qt3 支持模塊等,不過這與靜態編譯沒有直接關系了。

這樣一來,我們將得到QtCore.lib QtCored.lib 等靜態庫而不是

QtCore4.lib QtCored4.lib 等導入庫

QtCore4.dll QtCored4.dll 等動態庫

去除C、C++運行庫的依賴

通過 configure 的 -static 選項,我們可以編譯出 Qt 的靜態庫,如果只是不想發布程序時發布Qt的動態庫,這個已經完成了。

但是,它們仍依賴 C、C++ 的運行庫。如果還想去除該依賴,需要在靜態編譯Qt之前手動修改

  1. %QTDIR%\mkspecs\win32-msvc2008\qmake.conf 

將 QMAKE_CFLAGS_RELEASE 和 QMAKE_CFLAGS_DEBUG 中的 -MD -MDd 分別修改為 -MT 和 -MTd 即可。 這4個參數的含義很容易通過cl /?得到,另外,還可以將 CONFIG 中的 embed_manifest_dll embed_manifest_exe 去掉(也可以不去掉)。

注意:對 qmake.conf 的修改最好放在運行 configure 之前,不然的話,修改后還需要手動運行(原因你知道的 ;-) )

qmake -r如何加快編譯

編譯 Qt,應該是一個比較費時費力費空間的(磁盤中沒有15G的空閑空間,都不敢編譯Qt4.7)。編譯時有選擇地去掉一些東西是比較合適的

禁止編譯不需要的模塊,比如 Qt3Support,QtWebkit,等運行 configure -h 可以得到詳細的參數列表,禁止編譯例子和demo,當系統中存在多套Qt時,編譯例子確實不太需要,但 configure 沒有相應的參數來禁止 demo 和例子非windows系統下 configure 似乎支持 -nomake examples -nomake demos可以直接移除 demoes 和 examples 目錄(移除肯定就不會編譯了,但個人不喜歡這個) 可以修改 Qt 根目錄下的 projects.pro 文件

方法一 注釋掉 SUBDIRS += demos 這樣的行

方法二 直接修改 QT_BUILD_PARTS = libs tools examples demos docs translations

可以修改 Qt 根目錄下的 .qmake.cache 中的 QT_BUILD_PARTS

運行完 configure 后,我們也可以通過運行 make sub-src而不是 make來避免編譯非必須的東西

編譯完成后,運行 make confclean來清理編譯過程中的中間產物

插件問題

動態編譯時,插件似乎困擾不少人,經常有人抱怨,程序發布后,jpeg圖片無法顯示?中文顯示亂碼等等?

解決方法很簡單,發布時帶上插件就行了(注意路徑)

當采用靜態編譯后,插件問題更嚴重了,為什么呢?插件都成靜態庫了,無法動態加載了(或許已不能被稱為插件了)

看 QtPlugin 的Manual,有關于靜態插件的使用介紹

看例子中 tools/plugandpaint 例子,使用的靜態插件

常用插件

圖片插件 qgif qjpeg qico 等

數據庫 qsqlite 等

東亞語言 qcncodecs 等

phonon 后端支持插件

QStyle 插件
...
靜態編譯時插件的使用(比如,jpeg和gb2312的支持):

在 cpp 文件(main.cpp)內添加語句

  1. #include<QtPlugin>Q_IMPORT_PLUGIN(qjpeg) Q_IMPORT_PLUGIN(qcncodecs)pro 文件內添加  
  2. QTPLUGIN += qjpeg qcncodecs對于Mingw 

采用 Mingw 靜態編譯Qt的步驟和上面基本一樣(給configure傳遞 -static參數)。

再就是,修改

%QTDIR%\mkspecs\win32-msvc2005\qmake.conf為 QMAKE_LFLAGS 添加 -static 選項

但是 MinGW 編譯的程序會依賴下面的動態庫

  1. mingwm10.dll  
  2. libgcc_s_dw2-1.dll 

對后libgcc這個庫,似乎還好辦,一種說法是修改 <QTDIR>\qmake\Makefile.win32-* 中的

LFLAGS =為

LFLAGS = -static-libgcc這個我沒試,Qt4.6.3中 LFLAGS 默認確實為空,但Qt4.7中默認已經添加了該選項

對與 mingwm10 這個動態庫,似乎比較難辦。因為它似乎和異常、線程有關。

小結:Windows下 Qt 靜態編譯連接的內容介紹完了,希望本文對你有所幫助!如果還是不明白的話,請參考 解析 QT 靜態庫和動態庫 。希望你能用到!

責任編輯:zhaolei 來源: 互聯網
相關推薦

2011-06-21 17:01:44

Qt 靜態 編譯

2011-08-29 09:33:24

WindowsQt庫靜態

2011-06-21 16:51:21

Qt 靜態 編譯

2011-07-05 13:32:45

QT Mysql 驅動

2011-07-05 09:25:05

Qt MySQL 驅動

2011-06-29 17:00:26

QT 靜態編譯 Debug

2011-07-05 10:44:51

Qt Sqlite 靜態編譯

2011-06-21 17:35:11

Qt Creator 編譯

2011-07-01 12:52:50

Ubuntu Qt wxWidgets

2011-06-24 17:05:07

QT QT 4.7.3 windows

2011-06-16 10:09:25

QT Windows DLL

2011-07-02 14:11:46

Qt Gtk Ubuntu

2011-07-05 13:44:17

2011-06-23 09:54:00

VS2010 Qt 4.7.2 Qt

2011-07-05 10:03:00

Qt MYSQL 數據庫

2011-06-10 10:31:57

QT mysql linux

2011-06-08 15:27:24

QT QT 4.5 編譯

2011-06-09 15:18:07

QT 編譯

2011-08-29 10:11:49

QTWindowsVisual Stud

2019-12-17 08:39:21

Linuxwindowsoracle
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲视频国产视频 | 91爱爱·com | 一级片毛片 | 国产精品久久亚洲 | 亚洲一区二区三区桃乃木香奈 | 中文字幕在线一区二区三区 | 久久国产香蕉 | 国产1区在线 | 国产精品成人69xxx免费视频 | 久久综合一区二区三区 | 欧美精品在线免费观看 | 成人精品国产免费网站 | av毛片 | 在线观看www高清视频 | 国产精品久久久久无码av | 国产日韩欧美精品一区二区三区 | 精品视频免费 | 日本黄色的视频 | 成人欧美一区二区三区 | 日韩成人在线看 | 伊人网在线综合 | 亚洲人成人一区二区在线观看 | 久久久蜜桃 | 久久久久久国产免费视网址 | 色吊丝在线 | 久久久久久久久久久久久9999 | 日本啊v在线| 秋霞在线一区二区 | 人人做人人澡人人爽欧美 | 亚洲网站在线观看 | 黄色在线免费看 | 亚洲播放 | 四虎av电影 | 亚洲 欧美 综合 | 992tv人人草| 久久久久久久一区 | 91在线视频观看免费 | 日本不卡一区二区三区 | 国产精品一区二区三区在线播放 | 日本成人中文字幕在线观看 | 免费在线观看成人 |