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ù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、在linux中,qt里面已經(jīng)集成了最新的開發(fā)平臺QT Creator,下面是我練習(xí)調(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 += .SOURCES += mylib.cppHEAD

2、ERS += mylib.hmylib.h文件程序清單:#ifndef MYLIB_H#define MYLIB_H#ifdef Q_WS_WIN 表示在windows環(huán)境#define MY_EXPORT _declspec(dllexport)#else#define MY_EXPORT#endifclass mylib public:int mymax(int i, int j);int add(int i, int j);extern C MY_EXPORT int diff(int i, int j);#endif / MYLIB_Hmylib.cpp文件程序清單:#include

3、mylib.hextern 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, int j)if(i=j)return i-j;elsereturn j-i;對該工程進(jìn)行編譯,生成libzsz.so文件。2、創(chuàng)建一個GUI工程,并把zsz工程下的mylib.h和libzsz.so兩個文件拷貝到當(dāng)前目錄下。工程文件程序清單:# -#

4、 Project created by QtCreator 2009-03-02T10:15:03# -TARGET =TEMPLATE = appQT += svgDEPENDPATH += .INCLUDEPATH += .LIBS += ./libzsz.soSOURCES += main.cppHEADERS += mylib.hmain.cpp中的程序為:#include #include #include #include #include mylib.hint main(int argc, char *argv)QApplication app(argc, argv);QPush

5、Button hello(Hello world!zwd);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,9);hello.show();return app.exec();Qt 創(chuàng)建和使用動態(tài)鏈接庫原文出處: 與VC環(huán)境下的普通DL

6、L導(dǎo)出導(dǎo)入類似。 動態(tài)庫 在 qt creator 的 .pro 文件 中 : TEMPLATE = lib 使用 _declspec(dllexport) 申明要導(dǎo)出的函數(shù)或類 是否要加上 extern C看具體情形。 使用方用導(dǎo)入申明 _declspec(dllimport) 靜態(tài)庫 qt creator 的 .pro 文件 中 : TEMPLATE = lib 一、創(chuàng)建共享庫1、新其他建項目,選擇C+庫2、選擇共享庫,并取項目名稱,單擊下一步。這里取名位mylib3、按默認(rèn)配置單擊下一步至模塊選項,選擇所需支持的模塊。這里勾選Qtcore和QtGui。4、直接下一步至完成。現(xiàn)在一個共享庫

7、的工程就新建好了。5、右擊項目添加新文件,選擇Qt設(shè)計師界面,以便支持可視化界面設(shè)計。6、進(jìn)入可視化界面設(shè)計,修改objectName為Mylib7、修改mylib.h文件,代碼如下:cppview plaincopy1. #ifndefMYLIB_H2. #defineMYLIB_H3. #includemylib_global.h4. #include5. namespaceUi6. 7. classMylib;8. 9. classMYLIBSHARED_EXPORTMylib:publicQDialog10. 11. public:12. Mylib(QWidget*parent=0)

8、;13. private:14. Ui:Mylib*ui;15. ;16. #endif/MYLIB_Hcppview plaincopy1. #ifndefMYLIB_H2. #defineMYLIB_H3. #includemylib_global.h4. #include5. namespaceUi6. 7. classMylib;8. 9. classMYLIBSHARED_EXPORTMylib:publicQDialog10. 11. public:12. Mylib(QWidget*parent=0);13. private:14. Ui:Mylib*ui;15. ;16. #e

9、ndif/MYLIB_H8、修改mylib.cpp文件,代碼如下:cppview plaincopy1. #includemylib.h2. #includeui_mylib.h3. Mylib:Mylib(QWidget*parent):4. QDialog(parent),5. ui(newUi:Mylib)6. 7. ui-setupUi(this);8. cppview plaincopy1. #includemylib.h2. #includeui_mylib.h3. Mylib:Mylib(QWidget*parent):4. QDialog(parent),5. ui(newUi

10、: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)建了一個名為libtest的Dialog工程。1、修改工程文件,在文件尾添加如下代碼:cppview plaincopy1. INCLUDEPATH+=./2. LIBS+=./debug/lib.dllcppview

11、 plaincopy1. INCLUDEPATH+=./2. LIBS+=./debug/lib.dllINCLUDEPATH這一行就是為了讓我們的libtest項目可以找到mylib.h和mylib_global.h這兩個文件,你需要把這里的路徑替換成符合你的工程的路徑。LIBS這一行則需要告訴編譯器(注意,這里是編譯器!)到哪里去找到這個dll文件。這里,我的路徑為:cppview plaincopy1. INCLUDEPATH+=I:QtMyProjectsmylib2. LIBS+=I:QtMyProjectsmylibdebugmylib.dllcppview plaincopy1.

12、 INCLUDEPATH+=I:QtMyProjectsmylib2. LIBS+=I:QtMyProjectsmylibdebugmylib.dll2、在dialog中添加一個button,單擊button時調(diào)用共享庫。修改dialog.cpp文件,代碼如下:cppview plaincopy1. #includedialog.h2. #includeui_dialog.h3. #includemylib.h4. Dialog:Dialog(QWidget*parent):5. QDialog(parent),6. ui(newUi:Dialog)7. 8. ui-setupUi(this)

13、;9. 10. Dialog:Dialog()11. 12. deleteui;13. 14. voidDialog:on_pushButton_clicked()15. 16. Mylibw;17. w.show();18. w.exec();19. cppview plaincopy1. #includedialog.h2. #includeui_dialog.h3. #includemylib.h4. Dialog:Dialog(QWidget*parent):5. QDialog(parent),6. ui(newUi:Dialog)7. 8. ui-setupUi(this);9.

14、10. Dialog:Dialog()11. 12. deleteui;13. 14. voidDialog:on_pushButton_clicked()15. 16. Mylibw;17. w.show();18. w.exec();19. 3、此時運行一下,會是什么效果呢?什么都沒有!提示cppview plaincopy1. I:QtMyProjectslibtestdebuglibtest.exe啟動中.2. I:QtMyProjectslibtestdebuglibtest.exe退出,代碼:-1073741515cppview plaincopy1. I:QtMyProjects

15、libtestdebuglibtest.exe啟動中.2. I:QtMyProjectslibtestdebuglibtest.exe退出,代碼:-1073741515找到libtest工程目錄下的libtest.exe,雙擊運行,彈出沒有找到mylib.dll?不是使用LIBS指定了嗎?請注意,我們強調(diào)了,這個指定是編譯期的。dll是動態(tài)鏈接庫,也就是說,在exe運行的時候需要找到這個庫。運行時查找的順序是:當(dāng)前路徑-系統(tǒng)路徑(通常是system32)。所以,要把我們先前生成的這個mylib.dll復(fù)制到exe所在目錄,然后直接雙擊一下這個exe文件。程序運行如下單擊Mylibtest按鈕,共享庫mylib的dialog也彈出來啦到這里,共享庫的使用也成功了。三、更新dll也許有人要問了,共享庫的創(chuàng)建和使用都這么麻煩,用它有什么好處呢。共享庫的一個好處是可以動態(tài)加載,也就是說,如果你需要升級程序,那么就要簡單的替換掉這個dll就好了,不需要要求用戶重新安裝全部文件。當(dāng)然,這些dll也是有缺點的:動態(tài)加載的東西肯定會比靜態(tài)編譯的東西效率低一些。不過在現(xiàn)在的硬件環(huán)境下,這點性能損失已

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論