1. 程式人生 > >Win7下,用QT5編寫動態庫,使用動態庫時程式出現異常結束

Win7下,用QT5編寫動態庫,使用動態庫時程式出現異常結束

用Qt5編寫動態庫,跟別寫一般工程步驟類似,區別就是(1)建工程時候選擇library類別 (2)編譯和執行用的是qmake和構建。

QT5編寫動態庫

1、如下圖:依次點選 New Project  -> Library -> C++庫 -> Choose

2、進入如下介面: 選擇“共享庫” ,填寫庫名“ffku”,修改路徑“D:\123”   -> 點選“下一步”

     

3、進入如下介面:繼續“下一步”


4、進入如下介面:選擇需要的模組,繼續“下一步”


5、進入如下介面:這些都是自動生成的,看一眼繼續“下一步”


6、進入如下介面:問是否加入版本控制,暫時不用版本控制。點選“完成”


7、進入到工程:跟編寫其他工程一樣,把標頭檔案資訊放到“ffku.h”裡,把具體實現放到“ffku.cpp”裡,"ffku_global.h"標頭檔案不需要改動。


8、編寫好後,右擊專案名稱 ->  執行qmake -> 構建,此時就可以去路徑D:\123\build-ffku-Desktop_Qt_5_4_2_MinGW_32bit-Debug\debug下找庫了。


其中,ffku.dll就是動態庫,其他兩個可以刪除。

Qt5使用動態庫

1、新建一個測試工程:

在.pro檔案裡新增:

INCLUDEPATH+=D:/123/ffku
LIBS+=-LD:/123/build-ffku-Desktop_Qt_5_4_2_MinGW_32bit-Debug/debug
/-lffku

2、在.h檔案裡新增:

#include"ffku.h"

3、定義一個實體

Ffkukk;
這裡:生成的庫名的首字母會自動變為大寫字母。

4、使用ffku庫,比如庫裡有函式error(),功能就是列印一條資訊“i am the library”,

在.cpp檔案裡:kk.error();

執行程式,輸出“i am the library”,表示庫的編寫和使用正確。

我遇到的問題:

曾經我在linux上用Qt編寫過動態庫。跟上面過程一樣,唯一區別就是,

linux上:

INCLUDEPATH+=D:/123/ffku
LIBS+=D:/123/build-ffku-Desktop_Qt_5_4_2_MinGW_32bit-Debug/debug
/libffku.so

所以,Win7上,我也按上述格式新增:

INCLUDEPATH+=D:/123/ffku
LIBS+=D:/123/build-ffku-Desktop_Qt_5_4_2_MinGW_32bit-Debug/debug/ffku.dll

結果,程式總是異常退出。納悶了許久,才發現,win7上用Qt,跟linux上用Qt的格式還是有區別的。

linux上:兩者都行

INCLUDEPATH+=D:/123/ffku
LIBS+=-LD:/123/build-ffku-Desktop_Qt_5_4_2_MinGW_32bit-Debug/debug/-lffku
INCLUDEPATH+=D:/123/ffku
LIBS+=D:/123/build-ffku-Desktop_Qt_5_4_2_MinGW_32bit-Debug/debug/libffku.so

Win7上:貌似只能這麼寫

INCLUDEPATH+=D:/123/ffku
LIBS+=-LD:/123/build-ffku-Desktop_Qt_5_4_2_MinGW_32bit-Debug/debug/-lffku
而且在win7上,斜槓和反斜槓都可以,不區分。