1.共享庫介紹1. 1靜態(tài)函數(shù)庫1.1.1 庫名稱window下格式為: *.a 1.1.2 特點鏈接時被整合入目標(biāo)代碼。 1.1.3 優(yōu)點軟件運行不再依賴外部庫的支持,可以獨立運行。 1.1.4 缺點編譯后生成的exe包含了整個庫,所以體積比較大,而且由于是整個整合入代碼,所以如果有改動需要重新編譯軟件。 1.2 動態(tài)函數(shù)庫1.2.1 庫名稱window下格式為: *.dll 1.2.2 特點程序運行時再去庫里尋找函數(shù)。 1.2.3 優(yōu)點生成的exe不受共享庫的影響,改變庫函數(shù)的時候不需要重新編譯軟件,只需要替換dll即可,方便庫的更新升級。 1.2.4 缺點軟件需要依賴庫,安裝目錄會比較冗余,可能會出現(xiàn)奇怪的環(huán)境問題或者版本問題 。 2.QT生成共享庫2.1生成靜態(tài)鏈接庫點開.pro文件
關(guān)鍵配置:CONFIG += staticlib 表示只需要生成靜態(tài)庫 TEMPLATE 生成目標(biāo)是共享庫
生成.a靜態(tài)庫 (靜態(tài)庫實際上就是.o文件的集合) 2.2生成動態(tài)鏈接庫點開.pro文件 關(guān)鍵配置: TEMPLATE 生成目標(biāo)是共享庫 構(gòu)建工程。 生成動態(tài)庫.dll 可以看到此處也有.a 不過很明顯這個.a不是上面那種靜態(tài)庫(太小了),實際上它是這個.dll的索引文件,在VS下應(yīng)該是一個.lib的文件,它只包含了庫中的索引,比如類或者函數(shù),而實際的實現(xiàn)則在dll中。 3.QT使用共享庫3.1 未引用狀態(tài)此時為沒有引用任何共享庫的狀態(tài),生成exe 3.1引用動態(tài)鏈接庫
注意這個.a不是靜態(tài)鏈接庫,而是動態(tài)鏈接庫的索引 轉(zhuǎn)到pro可見 (關(guān)于pro參數(shù)問題后續(xù)單獨出再出文章分析) 可見已經(jīng)引用了libShared 代碼里也引用一下。重新構(gòu)建 可見沒有明顯變大 3.2 引用靜態(tài)鏈接庫轉(zhuǎn)到pro可見 生成的配置信息其實是一樣,下面那幾行是可以刪掉的。 重新構(gòu)建: 可見軟件是明顯變大了。 |
|