QT 创建者未链接

问题描述 投票:0回答:1

我有一个包含 2 个子项目(Sub1 和 Sub2)的项目:

ESI
|
|__Sub1
|
|__Sub2

在 Sub2 (demo1.cpp) 项目中的类的实现文件 (.cpp) 中,我需要包含 Sub1 项目的类。所以在 demo1.cpp 中我声明了:

#include "../sub1/controller.h"

为什么链接器找不到控制器的构造函数? (说未定义的参考)

c++ qt linker qt-creator
1个回答
2
投票

您的

#include
告诉编译器在哪里可以找到您的controller类的
定义
(即您的
controller.h
文件的内容)。

为了链接到 controller 类的

implementation
,链接器需要一个包含已编译实现的库。 -
Sub2
项目不会再次编译
Sub1
的内容,除非您将
.cpp
Sub1
文件包含在您的
Sub2
项目中,但这将是不好的做法,并可能导致进一步的问题。


假设

Sub1
是一个库,将生成为
sub1.lib
:

您需要将以下行添加到您的

.pro
项目的
Sub2
文件中:

LIBS += -L../Sub1 \
        -lsub1

这告诉链接器有一个包含库的“../Sub1”目录,并且有一个名为“sub1.lib”的库。使用

-L
-l
语法的优点是它适用于所有平台(Windows、Linux、Mac 等)。


如果

Sub1
Sub2
都是可执行文件(即项目生成
.exe
)文件,则需要将公共内容提取到单独的项目
Sub3
中,该项目的项目中包含
TEMPLATE = lib
而不是
TEMPLATE = app
.pro
文件。

© www.soinside.com 2019 - 2024. All rights reserved.