Qt(MinGW ) Windows下創建動態庫

Qt(MinGW ) Windows下創建動態庫

Qt(MinGW ) Windows下創建動態庫

 
1 人贊同了該文章

 

上一次和大家分享的是Linux下Qt創建共享庫並鏈接共享庫,這次和大家分享的是Windows下Qt創建共享庫並鏈接共享庫。大家肯定注意到標題中Qt後面括號中的minGW,爲什麼要加上minGW呢?先賣個關子,後面的介紹中會解釋的。

 

在上一篇文章中【Linux下Qt創建共享庫並鏈接共享】共享庫的創建與鏈接都已經有了詳細的步驟,所以本次文章中就不再贅述,主要說一下不同的地方。

 

  1. 創建共享庫

 

  1. 工程文件.pro的修改
QT       -= core gui

TARGET = TestLib
TEMPLATE = lib

DESTDIR = $$PWD/dll

DEFINES += CREATEDLL_LIBRARY

SOURCES += testadd.cpp

HEADERS += testadd.h

unix {
    target.path = /usr/lib
    INSTALLS += target
}

 

與Linux下相比,去掉了版本號的設置,因爲添加上不起作用。。相比Linux下,添加了DESTDIR = $$PWD/dll,這是目標目錄,會把生成的文件放到該目錄下。這裏沒有區分debug版本與release版本。

2. 生成共享庫的效果

由於我們在pro中指定了生成路徑,所以生成的文件都在dll文件中。這裏面要注意的是,生成的有兩個文件,一個是.a文件,在鏈接過程中使用,另一個是.dll文件,在運行過程中使用。

 

二、鏈接動態庫

  1. 添加動態庫

注意下這裏面的庫文件選擇的是剛纔生成的.a文件。默認勾選了爲debug版本添加’d’作爲後綴。

 

2. 編譯、運行過程中的問題

①編譯過程中出現的問題

../../../../i686-w64-mingw32/bin/ld.exe: cannot find -lTestLibd

什麼情況?沒有找到這個文件?再一看,後面多了一個d,默默地刪掉解決問題。

因爲剛纔勾選了爲debug版本添加’d’作爲後綴。。

 

②運行直接崩潰

生成庫的時候不還有一個文件麼,這時候它就該起作用了。將它與.exe(可執行文件)放到同一目錄下或者配置系統的環境變量都可以。

 

③結果如下

不知道大家能不能看出是Windows風格的?

 

 

 

後記總結:

①對比Linux與Windows,在運行時缺少庫的情況下Linux會提示,Windows則沒 有。不過掌握了動態庫的使用方法後,這些都是可以規避的。

 

②之前看到別人鏈接庫的後綴是.lib,難道是他錯了?或者是我錯了?可是我的能正常運行啊,但是我又看到的不止一個人鏈接的是.lib?於是我的求知慾再次被激起,查了下.a 、 .lib 、 .dll等的區別,最終發現是編譯工具的不同所導致。

用mingw的會生成.a和.dll後綴的,他們用的是msvc,所以生成的是.lib和.dll。下面的圖片是Qt的安裝包,可以看到不同安裝包所用的編譯工具的不同。

所以這也是我爲什麼要在標題中加入MinGW的原因了。另外,使用MinGW的工程也可以直接鏈接.lib文件,這個就之後再瞭解了。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章