QT:动态链接库的创建与使用
来源:互联网 发布:为知笔记 手机 导出 编辑:程序博客网 时间:2024/05/20 00:50
创建动态链接库
新建工程
- 启动Qt Creator依次选择 “文件/新建文件或工程…”,在弹出的“新建”对话框中依次选择 “其他项目/C++库”,如下图所示。
- 点击“选择(C)…”出现“C++库”对话框,在对话框中输入工程名称并选择路径,如下图所示。
- 点击“下一步(N) >”,直到出现模块选择的对话框,如下图所示,勾选QtGui。其他按照默认设置即可,直到向导完成。
在创建工程向导完成后会自动生成三个文件:GuiDll_global.h,guidll.h,guidll.cpp。我这里的工程名字与图上不同,因此建立的文件名称不同,建立的工程如下图:选中Shadow build,构建目录就是工程的输出路径(也可以不选中Shadow build,在pro文件中指定,下面的测试程序将使用这种方法)
自动建立的文内容如下:- myqtdll_global.h
这个文件不许要修改,如下 - myqtdll.h
关键字MYQTDLLSHARED_EXPORT的意思是将类Myqtdll
导出。下面对该类进行更改,需求为:创建并显示一个窗口,在窗口中显示一个QLabel控件。更改后的代码如下: - myqtdll.cpp
下面对该类进行更改,需求为:创建并显示一个窗口,在窗口中显示一个QLabel控件。更改后的代码如下:
- myqtdll_global.h
编译项目
生成动态链接库,其中三个是链接,一个是动态库,另外需要注意生成的路径是上面Shadow build中构建目录所指定的路径。
测试动态库
新建工程
在Qt Creator中创建空白的Qt工程qtdlltest,在工程中添加源文件main.cpp,输入如下代码:
修改文件
由于测试工程引用了libmyqtdll.so动态库,因此需要更改qtdlltest.pro文件,添加如下内容:
其中
DESTDIR =../Debug意思是编译出来的工程目录是上级的Debug目录,和上面的Shadow build的功能一样。
其中
unix:!macx:!symbian: LIBS += -L$$PWD/lib/ -lmyqtdllINCLUDEPATH += $$PWD/includes
上面第二行表示添加库libmyqtdll.so,第一行将myqtdll.h头文件的路径添加到工程中。
上面的路径是因为我将动态链接库和头文件放在了工程目录下的lib文件夹与includes文件夹内,其实这两句话也可自动生成,在pro文件内点击右键选择‘添加库‘即可添加include路径与动态库的路径了。
运行
在qt内调试程序即可看到结果。
脱离Qt Creator运行程序
上一步实现了在Qt Creator内的程序运行,但是在终端内运行程序则会提示动态链接库找不到的错误。
由于linux系统默认的动态库加载路径为/lib和/usr/lib等几个系统重要目录,为了方便管理,此处的测试动态库只放在当前工程的lib目录下,因此必须修改环境变量LD_LIBRARY_PATH将lib目录添加到动态库的搜索路径中,命令如下:
export LD_LIBRARY_PATH=$$PWD:$LD_LIBRARY_PATH
上面的意思是将当前目录加入环境变量中,因为我把动态库拷贝到了和可执行文件一个目录下。也就是程序运行时可以在同一目录下搜索动态链接库。
- QT:动态链接库的创建与使用
- 动态链接库的创建与使用
- 动态链接库的创建与使用
- Qt创建和使用动态链接库
- Qt创建和使用动态链接库
- Qt创建和使用动态链接库
- QT创建和使用动态链接库
- Qt 创建和使用动态链接库
- Qt 创建和使用动态链接库
- Qt创建和使用动态链接库
- Qt创建动态链接库
- LINUX系统中动态链接库的创建与使用
- LINUX系统中动态链接库的创建与使用
- LINUX系统中动态链接库的创建与使用
- linux动态链接库的创建与使用
- LINUX系统中动态链接库的创建与使用
- LINUX动态链接库的创建与使用
- LINUX系统中动态链接库的创建与使用
- c#调用C++的DLL找不到入口点以及衍生的相关问题
- 字符串的全排列和组合算法
- No result defined for action com.oa.action.InstructorAction and result input
- 安卓5.0新特性
- 基于黄金分割的修正Powell算法
- QT:动态链接库的创建与使用
- 使用移位运算和加减法实现乘除法
- 海量数据中选出最大的N个
- Win10驱动数字签名的解决办法
- 剑指offer-面试题8.旋转数组的最小数字
- oracle union 与 union all的区别
- 访问HTML元素
- 网络通信 - 重要知识点
- 苹果Xcode帮助文档阅读指南