vs2015qt靜態編譯
① 如何在VS2015中集成QT5.5
1. 首先,我們下載源碼包,加壓源碼包到磁碟。
2. 由於編譯QtWekbit需要ICU andANGLE 庫,ICU庫需要單獨下載和編譯,下載ICU4Cversion 56.1並解壓到磁碟,目錄位置參見隨後說明。
3. 在Qt 5.5.1的源碼包中還存在一個BUG,如果直接編譯的話在編譯QT3D模塊的時候會報沒有找到Zlib.h的錯誤而中斷編譯,所以參照如下提示修改qt-everywhere-opensource-src-5.5.1\qt3d\src\3rdparty\assimp目錄下的assimp.pri文件。可參考地址codereview.qt-project.org/...mp.pri。
4. 在編譯QT5.5.1之前還需要安裝配置一下的工具和環境:
5. 經過上面的步驟可以開始進行編譯ICU4C version 56.1和QT5.5.1的源碼了
6. 如果以上的配置都正確的話開機讓機器編譯幾個小時後就可以在目標路徑下生成QT5.5.1的運行文件。
② 動態庫 是什麼
首先,想要知道動態庫,我們得了解C++/C以及計算機的一些背景知識。
一般而言,在Windows下,*.dll文件就是動態庫文件。用C++/C開發的程序,在發布的時候,會出現兩種情況,第一,整個軟體就只有一個文件,你只要雙擊那個exe文件,就可以運行。第二,除了exe之外,還有dll等文件。在這里,我們假設的文件只有exe文件和dll文件, 不討論什麼圖標之類文件。
只有一個文件的,庫已經嵌到那個exe裡面。而有很多dll文件的程序,庫沒有嵌入到exe裡面。所以,你可以看一下,如果那個exe文件大小非常大,那就說明是靜態鏈接,在開發的時候是使用靜態庫。如果那個exe非常小,那麼一般是使用的動態庫。
那麼問題來了,動態庫與靜態庫相比優勢又是什麼。動態庫節約內存,為什麼這么說呢。假如兩個類型的程序,如果他們都有一個共同使用的dll,那麼在內存裡面,只有一份,而不是兩份。如果是使用了靜態庫,這會有兩份,會有很大的浪費空間。
當然,使用動態庫還有需要注意的地方。比如,有兩個名字一模一樣的動態庫Qtcore4.dll,但是呢,一個dll是用vs2010編譯器生成的,一個是用vs2015編譯器生成的。如果,exe使用的dll弄錯的話,程序結果會不對或者其他奇葩的問題。
以上均是一個大致的講解,細節部分請參考程序員的自我修養這本書!
③ VS2015靜態編譯QT5.6,有人成功過嗎
QT 5.5.1 VS2015 靜態編譯
編譯參數如下:
configure -confirm-license -opensource -platform win32-msvc2015 -debug-and-release -static -prefix "c:\Qt\5.5.1-static-vs2015" -make libs -nomake tests -nomake examples
我的工程用到了這些庫
qtpcred.lib
Ws2_32.lib
Qt5Cored.lib
qtharfbuzzngd.lib
opengl32.lib
Qt5Guid.lib
d3d9.lib
d3dx9.lib
ddraw.lib
D3D11.lib
dxguid.lib
Qt5Widgetsd.lib
Qt5WinExtrasd.lib
imm32.lib
qwindowsd.lib
winmm.lib
qtfreetyped.lib
Qt5PlatformSupportd.lib