




版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 音樂播放器及耳機套裝采購合同
- 不誠信的課件
- 山西應(yīng)用科技學(xué)院《朗讀與講故事指導(dǎo)》2023-2024學(xué)年第二學(xué)期期末試卷
- 江蘇省如東縣2024-2025學(xué)年初三教學(xué)質(zhì)量監(jiān)測(一)化學(xué)試題含解析
- 廈門大學(xué)《籃、足、排教學(xué)與實踐II》2023-2024學(xué)年第二學(xué)期期末試卷
- 荊州職業(yè)技術(shù)學(xué)院《物理化學(xué)Ⅳ》2023-2024學(xué)年第二學(xué)期期末試卷
- 山東省泰安市泰山區(qū)樹人外國語學(xué)校2025屆五年級數(shù)學(xué)第二學(xué)期期末經(jīng)典試題含答案
- 江蘇城鄉(xiāng)建設(shè)職業(yè)學(xué)院《商務(wù)英語閱讀一》2023-2024學(xué)年第二學(xué)期期末試卷
- 蘭州市皋蘭縣2025年四下數(shù)學(xué)期末學(xué)業(yè)質(zhì)量監(jiān)測試題含解析
- 石家莊工程職業(yè)學(xué)院《醫(yī)學(xué)影像技術(shù)學(xué)》2023-2024學(xué)年第一學(xué)期期末試卷
- 【計算機應(yīng)用基礎(chǔ)試題】池州學(xué)院2022年練習(xí)題匯總(附答案解析)
- 創(chuàng)傷性網(wǎng)胃炎課件
- 中醫(yī)醫(yī)術(shù)確有專長人員(多年實踐人員)醫(yī)師資格考核申請表
- 宏觀大類外匯系列專題(一)阿根廷匯率貶值的經(jīng)驗教訓(xùn)
- 教學(xué)課件 金屬學(xué)與熱處理-崔忠圻
- 成礦預(yù)測課件
- GB∕T 2518-2019 連續(xù)熱鍍鋅和鋅合金鍍層鋼板及鋼帶
- 年產(chǎn)美甲貼100萬張新建項目環(huán)境影響報告表
- 信息時代的研究生 學(xué)習(xí)與創(chuàng)新能力培養(yǎng)
- 契稅補貼申請表
- 西山煤電集團(tuán)白家莊礦煤層開采初步設(shè)計
評論
0/150
提交評論