QT5靜態編譯教程,主要針對vs2012

QT5靜態編譯教程,主要針對vs2012

轉自
轉自

QT5,VS2012靜態編譯,所有的庫準備充分的話qwebkit也可以靜態編譯通過,但是我編譯的版本使用中如果用了QWEBVIEW控件在連接時會出錯


注:我自己編譯的環境是:win server 2012 dc版 , vs2012 with update1,qt-everywhere-opensource-src-5.0.2,perl和rupy都是在qt官方給的地址下的最新的X64的,python是2.7 X64的、、、


本文主要針對qt 5.X版本,qt4.X的依賴沒那麼多,可以酌情參考下,但是好像用途不大、、
編譯器主要針對VS2012,vs2010和mingw的就編譯時參數換一個就行了,文中會有簡單提起、、、
編譯主要是靜態編譯,但是靜態編譯的話問題很多,我雖然不報錯編譯完成,但是使用沒測試,已知的是我編譯的版本qtwebkit使用時 QWEBVIEW控件在連接時會出錯。如果您要是動態編譯的話在編譯依賴庫(icu,openssl)時動態編譯就行了,在configure時不要-static選項即可。


雖然我編譯通過了,但是還是借鑑了網上很多教程,先發借鑑的鏈接,尊重版權:
http://www.ktao.net/archives/125  //這個編譯好像只編譯了qtbase,qtwebkit那塊原來我準備的連接庫不足,沒成功,就沒再測試。
http://www.cnblogs.com/wader/archive/2013/01/19/qt5_vc2012.html //這個是說動態連接的,但是很對。
http://qt-project.org/wiki/Building_Qt_5_from_Git  //官方的編譯方法


1、準備編譯需要的環境
  1.1準備編譯器
      這個不需要多說了吧?就是安裝vs或者mingw、、、
      vs系列可以去:http://msdn.itellyou.cn/ 下載,vs2012或者2010別用太低的版本,qt5要用c++11,只有這倆部分支持、、、
      mingw您可以用qt官方mingw版的,自帶的版本,您也可以自己去下,用tdm-gcc安裝方便點:http://tdm-gcc.tdragon.net/download,您也可以自己搜、、
   1.2準備其他需要的工具
    qt5還需要perl,pyhon,rupy、、
   Get Perl from: http://www.activestate.com/activeperl/downloads [activestate.com]
   Get Python from: http://www.python.org/download/releases/ [python.org] //有說需要用2.7版版本的。3.3的不行,我是用的2.7,沒試試3.3的
   Get Ruby from: http://www.rubyinstaller.org/ [rubyinstaller.org]


2.準備源碼
    這個我啥也不用說了吧、、、去官網下載,http://releases.qt-project.org/digia/ 這兒可以下載最新的、、、或者用git下載(這個我也不會用)、、、
  2.x配置源碼:如果需要靜態編譯就需要了,動態編譯請跳過:
    先說vs的:修改 源碼目錄\qtbase\mkspecs\win32-msvc*\qmake.conf   //win32-msvc*,*是您用的vs版本、、、
      找到這幾句;
                      QMAKE_CFLAGS_WARN_OFF   = -W0
                       QMAKE_CFLAGS_RELEASE    = -O2 -MD
                     QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += -O2 -MD -Zi
                    QMAKE_CFLAGS_DEBUG      = -Zi -MDd
    把MD和MDT改成MT和MTD,如下: //因爲md是動態連接運行時庫,MT是把運行時庫包含到程序裏
                      QMAKE_CFLAGS_WARN_OFF   = -W0
                       QMAKE_CFLAGS_RELEASE    = -O2 -MT
                     QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += -O2 -MT -Zi
                    QMAKE_CFLAGS_DEBUG      = -Zi -MTd 
    再說mingw的: 修改 源碼目錄\qtbase\mkspecs\win32-g++\qmake.conf 
   把QMAKE_LFLAGS        =  和QMAKE_LFLAGS_DLL        = -shared 這兩句改成:QMAKE_LFLAGS        = -static和QMAKE_LFLAGS_DLL        = -static


3、準備編譯需要的庫
     icu:這個qtwebkit必須的,qtbase也需要,但是沒有的話可以自動跳過。
     地址ICU http://site.icu-project.org/download   下來源碼,用您所用的編譯器還要再編譯成lib或者dll,注意靜態鏈接動態鏈接。(注,vs2012下靜態編譯的lib下的lib不能用,要把icu開頭的lib掐年都加上個s,保險起見希望加s和不加s都存在吧。)
   openssl: http://www.openssl.org/source/,注意這個編譯debug版的不好編譯,
  ANGLE-library :這個是把opengl轉換連接到DirectX的,地址:http://code.google.com/p/angleproject/,資料不多,我也不會用,可以用 -opengl desktop選項就行了、、
  SQLITE: http://www.sqlite.org/download.html 我不知道需要的是sqlite.dll還是源碼,還是sqllite.exe,所以我就把他們都房子一個目錄裏了。
注意:以上的您要注意debug和release版本、、還有動態編譯和靜態編譯、、、


4、配置環境變量,建議用個bat
     附個我用的bat,上面兩個鏈接也有bat腳本,您根據自己的位置自己修改吧,還有就是mingw的別往加上mingw的環境到bat:
這是我自己配置的32位的qt編譯配置。
::配置路徑
set QT5_DIR=E:\qt\qtsrc  //設置qt5的目錄
set THIRDPARTY_DIR=E:\qt\Build  
::如果您用mingw可以在這兒設置下您的mingw目錄
set PATH=%PATH%;D:\Perl64\site\bin;D:\Perl64\bin;D:\Python27;D:\Ruby\bin;  //用mingw就要加東西了
set PATH=%PATH%;%QT5_DIR%\bin;%QT5_DIR%\qtbase\bin;%QT5_DIR%\gnuwin32\bin;

::配置依賴,mingw的可能需要您手動加上庫和頭文件位置,vs的話您可以打開相應的VS* X86/64 本機命令提示符
set SQLITE3SRCDIR=%THIRDPARTY_DIR%\sqlite
set LIB=%LIB%;%THIRDPARTY_DIR%\icu\win32\lib;%THIRDPARTY_DIR%\icu\win32\libs;%THIRDPARTY_DIR%\openssl\openssl32\lib
set INCLUDE=%INCLUDE%;%THIRDPARTY_DIR%\icu\win32\include;%THIRDPARTY_DIR%\openssl\openssl32\include
set PATH=%PATH%;%THIRDPARTY_DIR%\icu\win32\bin;%THIRDPARTY_DIR%\openssl\openssl32\bin

::配置QT,爲了在輸入configure配置qt編譯選項,我就直接寫到bat了、、、
cd %QT5_DIR%
configure -prefix D:\QtSdk\Win32_static -opensource -confirm-license -static -platform win32-msvc2012 -release -c++11 -icu -openssl -opengl desktop -nomake demos -nomake examples -nomake tests-mp 



解析下我用的選項:
-prefixD:\QtSdk\Win32_static 設置qt的安裝目錄,
  -opensource -confirm-license qt的使用協議,這個是使用開源協議,並同意
-static 設置靜態編譯,動態編譯的話,去掉
-platform win32-msvc2012  設置編譯起類型,您根據情況歌換成win32-g++或者其他、、
-release 只編譯release版的,對應的-debug-and-release 編譯debug和release的、、只編譯debug的,我想您應該用不到吧、、
-c++11 開啓C++11的支持,好像這個選項默認就啓用了,gCC 4.7X支持大多數特性了,vs2012頁支持很多,vs2010支持少部分、、
-icu -openssl 使用icu和openssl 
-opengl desktop 不準備ANGLE,就要加上這個選項,否則報錯、、
-nomake demos -nomake examples -nomake tests 不編譯示例,測試、、、
  -mp 使用多核優化編譯、、


5、開始編譯,然後安裝
   nmake(vs系列用), mingw32-make.exe(mingw用)、、jom(如果您準備jom代替nmake的話)
  等吧、、漫長的等待、、然後安裝 在您前面的命令,例如 namke,安裝就是namke install
注意:安裝好後,您還要拷貝幾個icu的dll進您的安裝的qt裏、、
靜態編譯的qt,需要把icu\bin(64)裏的icudt*.dll和icuuc*.dll複製到qt的bin裏去、、
靜態編譯的話還需要把ICU\BIN(64)裏的部分lib複製到qt的bin裏面去,動態的話應該也需要,但是具體的還要您試下、、
我編譯的需要sicuuc.lib,sicuin.dll,sicudt.lib. //您要是感覺麻煩,全部都複製進去、、sicu*.lib前面的lib是自己加的、、、




mingw的編譯方法,您也可以看下前面幾位前輩的帖子:
鏈接:
http://www.qtcn.org/bbs/read-htm-tid-52265-fpage-2.html
http://www.qtcn.org/bbs/read-htm-tid-52231-fpage-2.html

附上我靜態編譯的icu和openssl、、VS2012 with update1 編譯的、、
64位的只有release版的、、
32位的有release和debug的,在同一目錄下,區別是debug的名字都比release多了個d
還有我用的bat、、、
http://pan.baidu.com/share/link?shareid=570262&uk=975261273
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章