




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、在linux中,qt里面已經(jīng)集成了最新的開發(fā)平臺QT Creator,下面是我練習調(diào)用動態(tài)庫(.so文件)的例程:1、打開QT Creator,點擊FileNew.菜單,選擇C+ Libarary工程,點擊下一步,輸入工程名稱(本例為zsz)即可,這沒什么可說的。 工程文件(.pro)程序清單# -# Project created by QtCreator 2009-03-02T10:09:35# -TARGET = zszTEMPLATE = libCONFIG += pluginDEPENDPATH += .INCLUDEPATH += .
2、SOURCES += mylib.cppHEADERS += mylib.h mylib.h文件程序清單: #ifndef MYLIB_H#define MYLIB_H#ifdef Q_WS_WIN 表示在windows環(huán)境#define MY_EXPORT _declspec(dllexport)#else#define MY_EXPORT#endif class mylib public:int mymax(int i, int j);int add(int i, int j);extern "C" MY_EXPORT int diff(i
3、nt i, int j);#endif / MYLIB_H mylib.cpp文件程序清單:#include "mylib.h"extern "C" MY_EXPORT int mylib:mymax(int i,int j)if(i>=j)return i;elsereturn j; extern "C" MY_EXPORT int mylib:add(int i,int j)return i+j; extern "C" MY_EXPORT int diff(int i, in
4、t j)if(i>=j)return i-j;elsereturn j-i;對該工程進行編譯,生成libzsz.so文件。 2、創(chuàng)建一個GUI工程,并把zsz工程下的mylib.h和libzsz.so兩個文件拷貝到當前目錄下。工程文件程序清單: # -# Project created by QtCreator 2009-03-02T10:15:03# -TARGET =TEMPLATE = app QT += svgDEPENDPATH += .INCLUDEPATH += .LIBS += ./libzsz.so SOURCES += main
5、.cppHEADERS += mylib.h main.cpp中的程序為: #include <qapplication.h>#include <QPushButton>#include <QLibrary>#include <QtDebug>#include "mylib.h" int main(int argc, char *argv)QApplication app(argc, argv);QPushButton hello("Hello world!zwd"
6、);hello.resize(400, 200);mylib a; qDebug()<<"In the two numbers 9 and 15,maxxer is "<< a.mymax(15,9);qDebug()<<"Add the two numbers 9 and 15,result is "<< a.add(15,9);qDebug()<<"Diff the two numbers 9 and 15,result is "<< diff(15
7、,9); hello.show();return app.exec();Qt 創(chuàng)建和使用動態(tài)鏈接庫原文出處: 與VC環(huán)境下的普通DLL導出導入類似。 動態(tài)庫 在 qt creator 的 .pro 文件 中 : TEMPLATE = lib
8、160; 使用 _declspec(dllexport) 申明要導出的函數(shù)或類 是否要加上 extern "C"看具體情形。 使用方用導入申明 _declspec(dllimport) 靜態(tài)庫 qt creator 的 .pro
9、文件 中 : TEMPLATE = lib
10、0; 一、創(chuàng)建共享庫1、新其他建項目,選擇C+庫2、選擇共享庫,并取項目名稱,單擊下一步。這里取名位mylib3、按默認配置單擊下一步至模塊選項,選擇所需支持的模塊。這里勾選Qtcore和QtGui。4、直接下一步至完成?,F(xiàn)在一個共享庫的工程就新建好了。5、右擊項目添加新文件,選擇Qt設計師界面,以便支持可視化界面設計。6、進入可視化界面設計,修改objectName為Mylib7、修改mylib.h文件,代碼如下:cpp view plaincopy1. #ifndef
11、60;MYLIB_H 2. #define MYLIB_H 3. #include "mylib_global.h" 4. #include <QDialog> 5. namespace Ui 6. 7. class Mylib; 8. 9. class MYLIBS
12、HARED_EXPORT Mylib :public QDialog 10. 11. public: 12. Mylib(QWidget *parent = 0); 13. private: 14. Ui:Mylib *ui; 15. ; 16. #endif / MYLIB_H c
13、pp view plaincopy1. #ifndef MYLIB_H 2. #define MYLIB_H 3. #include "mylib_global.h" 4. #include <QDialog> 5. namespace Ui 6. 7. class Mylib; 8. 9.
14、class MYLIBSHARED_EXPORT Mylib :public QDialog 10. 11. public: 12. Mylib(QWidget *parent = 0); 13. private: 14. Ui:Mylib *ui; 15. ; 16. #endif / MYL
15、IB_H 8、修改mylib.cpp文件,代碼如下:cpp view plaincopy1. #include "mylib.h" 2. #include "ui_mylib.h" 3. Mylib:Mylib(QWidget *parent): 4. QDialog(parent), 5. ui(new Ui:Mylib)&
16、#160; 6. 7. ui->setupUi(this); 8. cpp view plaincopy1. #include "mylib.h" 2. #include "ui_mylib.h" 3. Mylib:Mylib(QWidget *parent): 4. QDialog(parent),
17、60;5. ui(new Ui:Mylib) 6. 7. ui->setupUi(this); 8. 9、右鍵單擊項目,選擇構(gòu)建項目"mylib"。如果沒有錯誤,構(gòu)建成功后會在Debug文件夾下出現(xiàn)這三個文件。mylib.dll即為后面要使用到的共享庫,libmylib.a是Linux下使用的庫。至此,已生成了要使用的共享庫。二、共享庫的使用現(xiàn)在需要新建一個工程來調(diào)用我們剛才生成的共享庫。這里我創(chuàng)建了一個名為libtes
18、t的Dialog工程。1、修改工程文件,在文件尾添加如下代碼:cpp view plaincopy1. INCLUDEPATH += ./ 2. LIBS += ./debug/lib.dll cpp view plaincopy1. INCLUDEPATH += ./ 2. LIBS += ./debug/lib.dll INCLUDEP
19、ATH 這一行就是為了讓我們的 libtest 項目可以找到 mylib.h 和 mylib_global.h 這兩個文件,你需要把這里的路徑替換成符合你的工程的路徑。LIBS 這一行則需要告訴編譯器(注意,這里是編譯器?。┑侥睦锶フ业竭@個 dll 文件。這里,我的路徑為:cpp view plaincopy1. INCLUDEPATH += I:QtMyProjectsmylib 2. LIBS += I:QtMyProj
20、ectsmylibdebugmylib.dll cpp view plaincopy1. INCLUDEPATH += I:QtMyProjectsmylib 2. LIBS += I:QtMyProjectsmylibdebugmylib.dll 2、在dialog中添加一個button,單擊button時調(diào)用共享庫。修改dialog.cpp文件,代碼如下:cpp view plaincopy1. #include "dia
21、log.h" 2. #include "ui_dialog.h" 3. #include "mylib.h" 4. Dialog:Dialog(QWidget *parent) : 5. QDialog(parent), 6. ui(new Ui:Dialog) 7. &
22、#160;8. ui->setupUi(this); 9. 10. Dialog:Dialog() 11. 12. delete ui; 13. 14. void Dialog:on_pushButton_clicked() 15. 16. Mylib w; 17.
23、60;w.show(); 18. w.exec(); 19. cpp view plaincopy1. #include "dialog.h" 2. #include "ui_dialog.h" 3. #include "mylib.h" 4. Dialog:Dialog(QWidget *parent) :
24、 5. QDialog(parent), 6. ui(new Ui:Dialog) 7. 8. ui->setupUi(this); 9. 10. Dialog:Dialog() 11. 12. delete ui; 13. 14. void Dial
25、og:on_pushButton_clicked() 15. 16. Mylib w; 17. w.show(); 18. w.exec(); 19. 3、此時運行一下,會是什么效果呢?什么都沒有!提示cpp view plaincopy1. I:QtMyProjectslibtestdebuglibtest.exe 啟動中. 2. I:QtMyProjectslibtestdebuglibtest.exe 退出, 代碼: -1073741515 cpp view plaincopy1. I:QtMyProjectslibtestdebuglibtest.exe 啟動中. 2. I:QtMyProjectslibtestdebug
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度房屋抵押權設立合同
- 教育信息化解決方案項目投資合同
- 物流配送損害免責聲明
- 教育培訓服務責任豁免協(xié)議
- 文化產(chǎn)業(yè)投資開發(fā)協(xié)議書
- 攝影工作室拍攝作品著作權歸屬聲明
- 農(nóng)業(yè)現(xiàn)代化高效節(jié)水灌溉技術推廣方案
- 企業(yè)產(chǎn)品質(zhì)量危機處理預案
- 高考文言文雙文本專練:《史記》《論語》
- 近期項目成果回顧與反思
- 小兒白血病飲食
- 2024年杭州科技職業(yè)技術學院單招職業(yè)技能測試題庫及答案解析
- JGJ79-2012 建筑地基處理技術規(guī)范
- LIMS實驗室信息管理系統(tǒng)
- 柱塞泵工作原理動畫演示
- 數(shù)字法學原理
- 玉米收購可行性分析報告
- 最全醫(yī)院應急預案匯編目錄
- 駕駛員心理健康教育培訓課件
- 別墅的價格評估報告
- 滬科版七年級數(shù)學下冊 第六章 實數(shù) 單元測試卷
評論
0/150
提交評論