久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

專注電子技術學習與研究
當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

[原創]也談QT4.7靜態編譯

作者:佚名   來源:本站原創   點擊數:  更新時間:2011年03月04日   【字體:
網上有很多教程了,這里講一下我的過程.什么東西試一試才知道是否正確,只有自己做過以后才記憶深刻.
我安裝的是這個版本,在此之前,VS2008 已經安裝好了.

安裝好了后,直接在開始菜單中運行Qt 4.7.0 Command Prompt 命令行,啟動控制臺窗口
 
這個命令行實際上是一個批處理文件啟動的,這個批處理文件的內容如下:
//============
@echo off
rem
rem This file is generated by the Qt installer
rem
echo Setting up a Qt environment...
set QTDIR=e:\Qt\4.7.0
echo -- QTDIR set to e:\Qt\4.7.0
set PATH=e:\Qt\4.7.0\bin;%PATH%
echo -- Added e:\Qt\4.7.0\bin to PATH
set QMAKESPEC=win32-msvc2008
echo -- QMAKESPEC set to "win32-msvc2008"
if not "%1"=="vsvars" goto ENDVSVARS
call "C:\Program Files\Microsoft Visual Studio 9.0\Common7\Tools\vsvars32.bat"
:ENDVSVARS
if not "%1"=="vsstart" goto ENDVSSTART
call "C:\Program Files\Microsoft Visual Studio 9.0\Common7\Tools\vsvars32.bat"
devenv /useenv
:ENDVSSTART

//==============
內容很簡單,但比較方便,QT之前的版本,好像需要自己寫一個這樣的批處理.




 
在命令行下輸入 configure –h 可以看configure程序的幫助
 
輸入
configure -release -static -fast –no-qmake -no-webkit -no-qt3support -no-plugin-manifests
開始配置要編譯的項目.我對configure程序的理解是,它遍歷當前的*.pro文件,根據這些文件生成對應的Makefike. 而Makefile 文件是告訴編譯器如何編譯項目文件
 
靜態的QT 框架,有兩個“靜態”級別:
 一是不依賴QtCore4.dll 等動態鏈接庫,但這種級別的靜態庫還是要依賴 Msvcp90.dll Msvcrt90.dll,這些Runtime庫并沒有一起靜態進去。
 
二是完全靜態,連Msvcp90.dll Msvcrt90.dll,這些Runtime庫一并靜態包含,這樣在沒有QT運行庫,也沒有VC9.0文件庫的用戶機器上也能很好的運行。
 
第一種,我已經試過了,跳過下面的步驟,不修改qmake.conf 即可,這里我們要編譯第二種,因為想靜態,就徹底點,畢竟編譯一次不容易。
 
 
在qt的安裝目錄下找到mkspecs目錄,這個目錄下安裝的是各種開發環境的環境變量。這里我們修改win32-msvc2008 ,打開qmake.conf 文件,這是一個文本文件,把下面紅圈中的 QMAKE_CFLAGS_RELEASE 和 QMAKE_CFLAGS_DEBUG 中的 -MD -MDd 分別修改為 -MT 和 -MTd 即可,MT是把vc的Runtime也包含進來。


 
設置好了,運行configure程序,必須在這之前設置qmake.conf文件,否則改動不會在configure配置之后的Makefile文件中體現。
 
這個項目我先后編譯過兩次,第一使用的參數是:
Configure –static –fast –no-qmake –no-webkit
在正式編譯之前,我還試過 Configure –static –no-webkit 這樣的參數組合,配置過程非常的漫長,但后來用Configure –static –fast –no-qmake –no-webkit 則非常的快,沒有細究–fast –no-qmake 參數到底做了那些事。
配置完成以后,在命令行輸入 nmake 開始編譯,編譯過程非常的漫長,估計只少有5個小時。難以想象,如果把 qtwebkit 一起編譯有多么可怕。編譯完成以后,目錄增大了23G。
后來分析,很多demo ,example 是沒有必要編譯的。 第一次編譯時是沒有修改qmake.conf的,編譯完畢,能生成靜態庫,用DEPEND查看,需要msvcrt90.dll 和 msvcp90.dll。
 
第二次編譯使用的configure參數是:
Configure –static –fast –no-qmake –no-webkit –no-qt3support –no-plugin-manifests
QT3 我是沒有用過,我們公司也沒有在QT3上的遺留產品,因此這個肯定不要了。最后一個參數我不是太明白,但網上推薦這么做,也就加上了。
 
回車以后會出現下面的界面,網上都沒有人介紹,第一步是選擇QT的版本,是LGPL版還是商業版,我這里用的是LGPL版本,因此選o 回車。
 
接下來會提示是否接受LGPL協議,輸入y確認。







 
配置過程中會顯示一些開關的默認選項,以及一些目錄的地址。
簡單警告提示后幾秒鐘開始自動生成Makefile文件。

如果之前用過不同的參數配置,那么需要先運行 nmake confclean , 但這個命令我沒有成功過。似乎網上也有人說沒有成功。
直接這么nmake 會非常的耗時,因為它會把當前目錄下所有的Makefile都編譯生成一遍
當然也包含Demos 和Example 目錄
 
因為我們只會用到Src目錄下的東西,因此,在命令行下輸入 cd src 回車,然后在運行nmake。只編譯src目錄下的相關文件
 
經過一個多小時的時間就編譯完了,很快。


看看 cl的參數 –O2 –MT ,說明它是靜態編譯的。
接下來在這個目錄下運行 nmake clean 刪除編譯過程中的臨時文件。 OK 任務完成了。
 
用QtCreator 創建了一個最簡單的UI程序,編譯后,Release版本有5.4M大小,用Depend看,以及不依賴QtCore4.dll 和 其他dll 了,當然Msvcp90.dll 和Msvcrt90.dll也不用依賴了。
 
 
我還發現了一件有趣的事,靜態編譯后的lib文件還是放在lib目錄下,同樣QtCore項目編譯的動態庫是 QtCore4.lib 和 QtCore4d.lib ,而而靜態庫是 QtCore.lib 和 QtCored.lib ,那么編譯器又是如何找到它們的呢? 這個我還沒有細細的研究。
 
當我編譯靜態庫以后,創建的新項目會自動使用靜態鏈接,也就是說,我在.pro文件中沒有寫
CONFIG += static
它也會自動去鏈接靜態Lib。
接下來我又做了一個實驗,把qmake.conf 中的MT,MTd 該為 MD ,MDd。
重新生成這個項目,鏈接的時候報錯了,
@C:\DOCUME~1\tase\LOCALS~1\Temp\TestStatic.exe.26166109.jom
LIBCMT.lib(invarg.obj) : error LNK2005: __invoke_watson 已經在 MSVCRT.lib(MSVCR90.dll) 中定義
LIBCMT.lib(invarg.obj) : error LNK2005: __invalid_parameter_noinfo 已經在 MSVCRT.lib(MSVCR90.dll) 中定義
LINK : warning LNK4098: 默認庫“LIBCMT”與其他庫的使用沖突;請使用 /NODEFAULTLIB:library
release\TestStatic.exe : fatal error LNK1169: 找到一個或多個多重定義的符號
 
看來是庫不兼容啊!
 
正式使用的時候,把靜態編譯的QT 目錄單獨使用,動態庫在這里是用不著了!
 
個人感覺用QT是不適合靜態編譯的,QT的靜態編譯EXE文件太大了,一個什么都不做的exe就有5M之多。相比之下還是VC6靜態編譯效果好!
 
但我們用QT,又有幾個人在乎它的靜態編譯呢?
關閉窗口

相關文章

主站蜘蛛池模板: 一本综合久久 | 日日夜精品视频 | 九九综合 | 91国产在线视频在线 | 亚洲视频免费观看 | 羞羞视频一区二区 | 国产精品久久久99 | 嫩草影院网址 | h视频在线播放 | 国产乱码精品1区2区3区 | 国产福利91精品 | 成人激情视频在线 | 狠狠躁天天躁夜夜躁婷婷老牛影视 | 中文字幕av亚洲精品一部二部 | 久久99久久99精品免视看婷婷 | 中文日本在线 | 337p日本欧洲亚洲大胆精蜜臀 | 亚洲精品久久久久久一区二区 | 91精品国产综合久久久久久蜜臀 | 精品国产免费一区二区三区五区 | 国产小视频精品 | 91精品91久久久 | 国产一区二区久久久 | 久久这里只有精品首页 | 福利片在线观看 | 91精品久久久久久久久 | 亚洲日本视频 | 亚洲一区 | 久久久入口 | 国产羞羞视频在线观看 | 中文字幕在线精品 | 黄免费观看视频 | 日韩欧美天堂 | 国产精品久久久久久久7电影 | 免费一级淫片aaa片毛片a级 | 成人午夜视频在线观看 | 日本不卡一区二区三区在线观看 | 成人久久久 | 久草新在线 | 黄色一级片视频 | 4hu最新网址 |