今天终于解决如何使用动态库的方法:
- 首先我们先建立一个库文件:
你可以选择更换库名,像我一样把它改为calculate,点击下一步:
点击下一步,然后选择你的动态库所需要的模块,我选择了如下图:
再选择下一步:
再点击下一步,选择完成:
你就会看到了:
然后将calculate_glbbal.h中的如下图红色框里的代码复制到calculate.h里,并将calculate_glbbal.h头文件删除:
可以编辑属于自己的代码了:
点击构建里的qmake,然后重新构建时,你会遇到如下问题:
原来我在calculate.h文件少添加红色库里的语句:
重新执行构建里qmake和重新构建,就会遇到如下图,我可以不管它:
动态库基本构建好了,接下来我就要使用动态库了,有基础的小伙伴们就可以新建一个工程(写给刚刚接触QT的人):
下图所示的是:可以修改默认的名称
下图所示的你可以选择的类名的地方:
你点击完成看到的一个界面:
然后请在建立动态库的地方查找,点击它:
然后打开debug,(有时可能在release里,关键在于
选择了debug还是release)
将.dll 和 .lib 复制到 result文件里
也将calculate里的calculate.h复制
复制到result文件里
接下来进入我被别人坑死的步骤:错误,可以跳过:
首先在result.pro 添加横线的语句:
正确的步骤:首先右击头文件,添加现有文件,选择calculate.h,添加横线的语句,
然后执行qmake 和构建,你会遇到:
在百度里你可能会找到正确的答案,但是你已经被坑几次了,像我一样,说起来就是一把辛酸泪啊!
接下来告诉你正确的打开的方式:
请将result的红框的内容复制到built_result里debug里
粘贴
然后右击result文件,选择添加库
如果你不删除红框里的,你会遇到 E:\qt\build-result-Desktop_Qt_5_7_0_MSVC2015_64bit-Debug\debug\calculate.dll:-1: error: LNK1107: 文件无效或损坏: 无法在 0x378 处读取
只有删除后你才能正常的使用
如果你还有少许程序异常:
注意:
QT坑人一大亮点:如果你在构建过程中出现问题,你重新修改后确定没有错误的前提下,再运行可能还是相同的错误,那么你需要
清除----------重新执行qmake------重新构建
编译出现问题: 编译Qt程序使用动态库时,报错 error: LNK1107: 文件无效或损坏: 无法在 0x310 处读取
原因
链接时,使用的dll,而不是lib。
lib是编译时需要的,dll是运行时需要的。
windows下动态库和静态库
动态库:生成动态库时,除了生成dll还有与之对应的lib,在这里lib不是静态库而是编译时动态链接库的导入库。因此编译时需要dll和lib;运行时需要dll
静态库:只有一个lib库,编译时需要,lib被编译到程序中,因此运行时,不再需要