我有一个包含 2 个子项目(Sub1 和 Sub2)的项目:
ESI
|
|__Sub1
|
|__Sub2
在 Sub2 (demo1.cpp) 项目中的类的实现文件 (.cpp) 中,我需要包含 Sub1 项目的类。所以在 demo1.cpp 我已经声明:
#include "../sub1/controller.h"
为什么链接器找不到控制器的构造函数?(说未定义的参考)
谢谢
我有一个包含 2 个子项目(Sub1 和 Sub2)的项目:
ESI
|
|__Sub1
|
|__Sub2
在 Sub2 (demo1.cpp) 项目中的类的实现文件 (.cpp) 中,我需要包含 Sub1 项目的类。所以在 demo1.cpp 我已经声明:
#include "../sub1/controller.h"
为什么链接器找不到控制器的构造函数?(说未定义的参考)
谢谢
你#include告诉编译器它可以在哪里找到你的类的定义controller(即你的controller.h文件的内容)。
为了链接到您的类的实现controller,链接器需要一个包含已编译实现的库。-Sub2项目不会Sub1再次编译 的内容,除非您在项目中包含 的.cpp文件,这将是不好的做法,并且可能导致进一步的问题。Sub1Sub2
假设Sub1是一个库,它将生成为sub1.lib:
您需要将以下行添加到您的项目.pro文件中Sub2:
LIBS += -L../Sub1 \
-lsub1
这告诉链接器有一个包含库的“../Sub1”目录,并且有一个名为“sub1.lib”的库。使用-Land-l语法的优点是它适用于所有平台(Windows、Linux、Mac 等)。
如果Sub1和Sub2都是可执行文件(即项目产生一个.exe)文件,您需要将公共内容提取到一个单独的项目中,该项目在其文件Sub3中TEMPLATE = lib而不是TEMPLATE = app在其.pro文件中。