一般大型项目中, 会将实现特定功能的函数或类, 封装成链接库, 供应用程序代码调用. 下面我将一步步教你如何在qt 中创建动态库, 并使用它.
创建多子目录项目
- 首先创建一个多子目录项目(即含有多个项目的工程, 类似于VS中的解决方案)
- 输入项目名称, 选择创建路径. 比如"demo".
- 选择编译工具, 这里MSVC, MinGW 均可.
- 完成&添加子项目.
创建动态链接库
- 选择 “Library” | “C++ Library”.
- 输入库的名称.
- 选择 “qmake”.
- 类型设置为共享库, "Qt module"根据库的功能设置为Core, Widget, 或其他.
- 编译工具选择, 所有的子项目均选择相同的编译工具.
- 完成即可.
编辑链接库内容
- 打开 “mydll.pro”, 添加内容:
DESTDIR = ../
(指定目标文件的输出位置)
- "mydll.h"的类声明中添加函数声明.
- 在"mydll.cpp"中添加函数的定义.
创建应用工程并连接动态链接库
- 在顶层项目"demo"上右键选择 添加新子项目.
- 选择: “Application(Qt)” -> “Qt Widgets Application”
- 输入子项目名称, 比如:“app”
- 选择构建系统为:“qmake”
选择编译工具, 所有的子项目均选择相同的编译工具.
- 完成.
- 打开"app.pro", 添加内容:
LIBS += ../mydll.lib
DESTDIR = ../
LIBS
指定要链接的库名称, 因为在"mydll.pro"中指定了目标文件路径为"…/“, 所以, 库名称为”…/mydll.lib"
- 编辑"mainwindow.cpp", 添加如下内容, 调用动态链接库中的函数.
- 构建项目.
- 如果能够构建成功, 动态库的创建和使用应该是没问题的.
- 接下来, 运行我们的工程. 在应用程序输出窗口, 可以看到打印信息.
注意: 修改DESTDIR
很重要, 将所有链接库的和应用程序输出的目标文件都指定到"…/", 这样运行应用程序时就不会出现找不到动态链接库的情况.