1.創建C++庫
1.1點擊New Project
1.2選擇庫模板
選擇“Library”中的”C++庫”,再點擊“Choose”。
1.3選擇共享庫
給共享庫取個名稱,並指定生成文件存放路徑。再點擊“下一步”。
1.4選擇編譯器
再點擊“下一步”。
1.5選擇所需要的模塊
默認選擇QtCore(QtCore模塊提供核心的非圖形用戶接口功能,所有其他Qt模塊都依賴於這個模塊,如果您使用qmake來構建您的項目,則默認將QtCore包含在內)
相信,大部分人封裝動態鏈接庫的時候是不需要將界面封裝的,只需要封裝核心代碼,故我們在此不選擇QtGui。但如果需要將圖形界面一起封裝,就需要選擇該項。
再點擊“下一步”。
1.6項目管理
點擊”完成“。
1.7點擊項目,勾掉Shadow build,使.dll不生成在debug目錄中,生成在我們自己創建的目錄下面,方便查找和使用
1.8 在.pro文件中,添加如下代碼
DESTDIR =..\MyDebug
使生成的.dll文件放在該目錄下,自動創建該目錄。
1.9 點擊運行,即可生成。(此彈框不用管它,代表編譯成功,已生成文件)
注意:
當創建完C++庫的工程后, 可以看到QT自動生成了一個名為serial_global.h的文件。其中serial是我工程的名字。
#ifndef SERIAL_GLOBAL_H #define SERIAL_GLOBAL_H #include <QtCore/qglobal.h> #if defined(SERIAL_LIBRARY) # define SERIALSHARED_EXPORT Q_DECL_EXPORT #else # define SERIALSHARED_EXPORT Q_DECL_IMPORT #endif #endif // SERIAL_GLOBAL_H
其中第6和第7行的意思如果定義了SERIAL_LIBRARY,SERIALSHARED_EXPORT定義為Q_DECL_EXPORT,否則定義為Q_DECL_IMPORT。這就是把對象導出的語句。
SERIAL_LIBRARY在.pro中定義
在對應的serial.h中可以看到
在Serial前面就跟着SERIALSHARED_EXPORT。就相當於把Serial導出。所謂的導出,就是將其編譯成一個dll文件后,其他的文件可以使用這個導出類。
所以如果自己定義的函數不在類里面,就要單獨的導出。
也可以用extern "C" { }把里面的函數全部包含進去。
2.調用C++庫
2.1 手動添加
2.1.1在文件目錄創建include目錄和lib目錄
把對應的庫放到lib目錄中,把對應的頭文件放在include目錄中。
2.1.2 在.pro中添加對應信息
LIBS += -L$$PWD/lib -lSerial INCLUDEPATH += $$PWD/include DEPENDPATH += $$PWD/include
2.1.3 在main.cpp中添加頭文件
這樣就可以直接調用共享庫中的對象或者函數了。
2.2 自動添加庫
直接點擊test,然后單間右鍵。里面有一個“添加庫”。