QTCreator调用动态库实例_第1页
QTCreator调用动态库实例_第2页
QTCreator调用动态库实例_第3页
QTCreator调用动态库实例_第4页
QTCreator调用动态库实例_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、在linux中,qt里面已经集成了最新的开发平台QT Creator,下面是我练习调用动态库(.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环境#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;对该工程进行编译,生成libzsz.so文件。2、创建一个GUI工程,并把zsz工程下的mylib.h和libzsz.so两个文件拷贝到当前目录下。工程文件程序清单:# -#

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 创建和使用动态链接库原文出处:http:/blog.c

6、/q/article/details/ 与VC环境下的普通DLL导出导入类似。 动态库 在 qt creator 的 .pro 文件 中 : TEMPLATE = lib 使用 _declspec(dllexport) 申明要导出的函数或类 是否要加上 extern C看具体情形。 使用方用导入申明 _declspec(dllimport) 静态库 qt creator 的 .pro 文件 中 : TEMPLATE = lib 一、创建共享库1、新其他建项目,选择C+库2、选择共享库,并取项目名称,单击下一步。这里取名位mylib3、按默认配置单击下一步至模块选项,选择所需支持的

7、模块。这里勾选Qtcore和QtGui。4、直接下一步至完成。现在一个共享库的工程就新建好了。5、右击项目添加新文件,选择Qt设计师界面,以便支持可视化界面设计。6、进入可视化界面设计,修改objectName为Mylib7、修改mylib.h文件,代码如下:cppview plaincopy1. #ifndefMYLIB_H2. #defineMYLIB_H3. #includemylib_global.h4. #include5. namespaceUi6. 7. classMylib;8. 9. classMYLIBSHARED_EXPORTMylib:publicQDialog10.

8、11. public:12. Mylib(QWidget*parent=0);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);1

9、3. private:14. Ui:Mylib*ui;15. ;16. #endif/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*

10、parent):4. QDialog(parent),5. ui(newUi:Mylib)6. 7. ui-setupUi(this);8. 9、右键单击项目,选择构建项目mylib。如果没有错误,构建成功后会在Debug文件夹下出现这三个文件。mylib.dll即为后面要使用到的共享库,libmylib.a是Linux下使用的库。至此,已生成了要使用的共享库。二、共享库的使用现在需要新建一个工程来调用我们刚才生成的共享库。这里我创建了一个名为libtest的Dialog工程。1、修改工程文件,在文件尾添加如下代码:cppview plaincopy1. INCLUDEP

11、ATH+=./2. LIBS+=./debug/lib.dllcppview plaincopy1. INCLUDEPATH+=./2. LIBS+=./debug/lib.dllINCLUDEPATH这一行就是为了让我们的libtest项目可以找到mylib.h和mylib_global.h这两个文件,你需要把这里的路径替换成符合你的工程的路径。LIBS这一行则需要告诉编译器(注意,这里是编译器!)到哪里去找到这个dll文件。这里,我的路径为:cppview plaincopy1. INCLUDEPATH+=I:QtMyProjectsmylib2. LIBS+=I:QtMyProjects

12、mylibdebugmylib.dllcppview plaincopy1. INCLUDEPATH+=I:QtMyProjectsmylib2. LIBS+=I:QtMyProjectsmylibdebugmylib.dll2、在dialog中添加一个button,单击button时调用共享库。修改dialog.cpp文件,代码如下:cppview plaincopy1. #includedialog.h2. #includeui_dialog.h3. #includemylib.h4. Dialog:Dialog(QWidget*parent):5. QDialog(parent),6.

13、ui(newUi:Dialog)7. 8. ui-setupUi(this);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(n

14、ewUi:Dialog)7. 8. ui-setupUi(this);9. 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退出,代码:-cppvie

15、w plaincopy1. I:QtMyProjectslibtestdebuglibtest.exe启动中.2. I:QtMyProjectslibtestdebuglibtest.exe退出,代码:-找到libtest工程目录下的libtest.exe,双击运行,弹出没有找到mylib.dll?不是使用LIBS指定了吗?请注意,我们强调了,这个指定是编译期的。dll是动态链接库,也就是说,在exe运行的时候需要找到这个库。运行时查找的顺序是:当前路径-系统路径(通常是system32)。所以,要把我们先前生成的这个mylib.dll复制到exe所在目录,然后直接双击一下这个exe文件。程序运行如下单击Mylibtest按钮,共享库mylib的dialog也弹出来啦到这里,共享库的使用也成功了。三、更新dll也许有人要问了,共享库的创建和使用都这么麻烦,用它有什么好处呢。共享库的一个好处是可以动态加载,也就是说,如果你需要升级程序,那么就要简单的替换掉这个dll就好了,不需要要求用户重新安装全部文件。当然,这些dll也是有缺点的:动态加载的东西肯定会比静态编译的东西效率低一些。不过在现在的硬件环境下,这点性能损失

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论