关于解决QT报错cannot find -lxxx(xxx为被调模型)和undefined reference to’_imp__ZN11/14xxx(xxx同上)的一种方法
前情提要
我的项目分为计算模块(被调)和显示模块(调用),每一模块有对应的.c和.cpp文件。显示模块需要调用计算模块的方法。
而在我更改完计算模块的函数,在显示模块调用时出现了这个错。(每次被调模块修改时都已经执行过qmake和构建)
问题分析
应该是被调模块的头文件没有被调用模块正确包含,以及lib文件没有正确被使用。
解决方案
- 在调用模块的文件夹下新建一个文件夹,命名为“include”,专门用于存放被调模块的头文件。再在同一位置命名一个“lib”文件,用于存放被调模块生成的动态链接库。
- 点击“项目”,“Active Project ”中选择被调模块,勾选Shadow build,构建目录选择刚才新建的lib文件夹的路径。
- 在调用模块的.pro文件中添加两句话
INCLUDEPATH += include
LIBS += -Llib/debug -lxxx(xxx为被调模块名称)
(注意:lib/debug 也可改为被调模块构建目录的绝对路径, 如果需要加载别的被调模块,只需要往后加 -lxxx) - 将被调模块的头文件(.h)文件复制到调用模块的include文件夹中。
- 注意,每次对被调模块进行更改,都需要重新复制一遍更改后的头文件到include文件夹中。
- 以后再有调用时出现这个情况,要么就是复制被调模块头文件进调用模块的include文件夹。要么就是在第二步中把生成的.a .o .dll文件复制进调用模块的lib文件夹。