我有一个包含 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
文件,这将是不好的做法,并且可能导致进一步的问题。Sub1
Sub2
假设Sub1
是一个库,它将生成为sub1.lib
:
您需要将以下行添加到您的项目.pro
文件中Sub2
:
LIBS += -L../Sub1 \
-lsub1
这告诉链接器有一个包含库的“../Sub1”目录,并且有一个名为“sub1.lib”的库。使用-L
and-l
语法的优点是它适用于所有平台(Windows、Linux、Mac 等)。
如果Sub1
和Sub2
都是可执行文件(即项目产生一个.exe
)文件,您需要将公共内容提取到一个单独的项目中,该项目在其文件Sub3
中TEMPLATE = lib
而不是TEMPLATE = app
在其.pro
文件中。