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上,斜槓和反斜槓都可以,不區分。