使用VS2012編譯QT 5 2 1靜態庫

2022-03-15 14:33:09 字數 3309 閱讀 5954

記錄一下自己用vs2012編譯qt 5.2.1為靜態庫的過程,希望給能看到本文的朋友乙個參考。

解壓到目錄 qt-everywhere-opensource-src-5.2.1\

2.更改vc執行庫的配置:

vs2012對應的配置檔案是:qt-everywhere-opensource-src-5.2.1\qtbase\mkspecs\win32-msvc2012\qmake.conf

把md改為 mt,  mdd改為mtd,共三處:

qmake_cflags_release    = -o2 -mt

qmake_cflags_release_with_debuginfo += -o2 -mt -zi

qmake_cflags_debug      = -zi -mtd

3.建立乙個批處理檔案:

比如建立乙個檔名為vs2012.build.bat的bat檔案,放到目錄qt-everywhere-opensource-src-5.2.1下面,然後進行編輯,內容如下:

configure -confirm-license -opensource -platform win32-msvc2012 -vcproj -debug-and-release -static -prefix "d:\qt\5.2.1-static" -no-opengl -qt-zlib -qt-libpng -qt-libjpeg -qt-freetype -no-angle -nomake tests -no-compile-examples

4.執行vs2012.build.bat:

首先必須要執行vs2012的批處理檔案(安裝後會有這個快捷方式):vs2012 x86 native tools command prompt.bat,這樣就開啟了乙個控制台視窗,cd到目錄qt-everywhere-opensource-src-5.2.1,再執行vs2012.build.bat, 完成後檢查是否成功,成功後就繼續下一步.

5.開始編譯:

編譯只要執行 nmake 即可,這是乙個漫長的過程,................,不出意外最後沒有任何錯誤的結束了。

6.安裝:

上述編譯成功後,只要執行 nmake install就會把最終的bin/lib/include等等相關的檔案複製到我們之前配置的目錄

d:\qt\5.2.1-static,至此靜態庫編譯就全部完成了,慶祝一下吧!

7.安裝和配置qt vs add-in:

安裝完成後執行vs2012,會多乙個"qt5"的選單,執行 "qt options"

增加新的qt版本配置:

ok後配置就完成了。

8.建立qt project進行測試,這一步很關鍵:

建立乙個qttest的qt 應用程式,開始編譯,啊,居然編譯不通過!當然不會通過,因為我們編譯的qt 5.2.1的vc執行庫是mt和mtd,工程嚮導建立的預設是md和mdd,那就改一下吧,debug版本改為:multi-threaded debug (/mtd),這下編譯終於通過了,再次,離成功又近了一步,那就趕緊run吧,然後居然彈出乙個assert視窗。

解決方法:

1. 新增qwindows.lib的路徑。

2.在工程的main.cpp中,加入如下**:

#include q_import_plugin (qwindowsintegrationplugin);

#pragma comment (lib,"opengl32.lib")

#ifdef _debug //debug mode

#pragma comment (lib,"qt5platformsupportd.lib")

#pragma comment (lib,"qwindowsd.lib")

#else //release mode

#pragma comment (lib,"qt5platformsupport.lib")

#pragma comment (lib,"qwindows.lib")

#endif

3.如果要相容xp,修改vc2012的平台工具集

專案-> 屬性-> 配置屬性-> 常規-> 平台工具集

選擇v110_xp

用vs2012 x86編譯的qt5.1.1,assistant無法啟動問題

被這種莫名其妙的問題卡住,很不爽,索性編了一套帶除錯資訊的release版,除錯後,發現問題是出在檔案textencodingregistry.cpp中(qt5webkit模組):

passownptrnewtextcodec(const textencoding& encoding)

上面那行

紅色的**,encoding.name()的值是"iso-8859-1",返回的factory卻是空的,導致後面呼叫它的成員函式function時直接access violation。

在網上查了一下,發現這個問題早在qt 4.8.2時就已經存在了,同樣的工具鏈(vs2012 x86),同樣的異常**:

將函式:

static void addtotextcodecmap(const char* name, newtextcodecfunction function, const void* additionaldata)

修改為:

static void addtotextcodecmap(const char* name, newtextcodecfunction function, const void* additionaldata)

}assert(atomicname);

textcodecmap->add(atomicname, textcodecfactory(function, additionaldata));

}將函式:

passownptrnewtextcodec(const textencoding& encoding)

修改為:

passownptrnewtextcodec(const textencoding& encoding)

}assert(factory.function);

return factory.function(encoding, factory.additionaldata);

}注:qt5webkit的keyvaluepair的鍵/值使用的是key/value,不是原來的first/second。

使用VS2012編譯Qt 5 5 0

安裝編譯qtwebkit所需的工具 見trac.webkit.org關於buildqtonwindows 安裝 perl,python,ruby,gnuwin32,openssl等 安裝icu庫 download icu library from 解壓縮到c icu 新增 c icu bin and...

VS2010下安裝QT5 2 1外掛程式

本人安裝的過程是根據這篇部落格來進行安裝,期間遇到一些安裝的問題,在這裡列出來。1.windows 下的qt 庫qt5.2.1 for vs2010 下的qt 外掛程式 這是修改過預設安裝路徑的 4.qt5.2.1中庫函式裡面包含的函式與之前版本的不同,所以在程式設計的時候需要謹慎,要根據新版本的函...

VS2012編譯WDM驅動

新版的vs2012中整合了wdk8,而且wdk8中已經沒有之前的build environment了,看來編譯驅動只能通過vs2012了,直接開發wdf驅動很方便直接選取相應的模板即可,若是編譯以前的wdm驅動,則需要做一下轉換,具體步驟如下 開啟vs2012,file open convert s...