QTCreator調(diào)用動態(tài)庫實例_第1頁
QTCreator調(diào)用動態(tài)庫實例_第2頁
QTCreator調(diào)用動態(tài)庫實例_第3頁
QTCreator調(diào)用動態(tài)庫實例_第4頁
QTCreator調(diào)用動態(tài)庫實例_第5頁
已閱讀5頁,還剩8頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論