【问题标题】:Qt doesn't recognize other sub-projectsQt 不识别其他子项目
【发布时间】:2016-04-13 05:37:29
【问题描述】:

我目前正在 MacOS 上使用 QT-Creator,目前我有点卡在 2 点上。我有一个主项目和两个子项目。到目前为止,这一切正常。

主项目的.pro文件如下所示:

//...
TEMPLATE = subdirs
SUBDIRS += Proj1
SUBDIRS += Proj2

Proj1.pro 文件如下所示:

TARGET = Proj1
CONFIG += console
CONFIG -= app_bundle

TEMPLATE = app

SOURCES += someclass1.cpp
HEADERS += someclass1.h

Proj2.pro 看起来很相似,除了 SOURCES 和 HEADERS 部分:

//...
SOURCES += someclass2.cpp main.cpp
HEADERS += someclass2.h

现在进入有趣的部分

我的someclass1.cpp 包含一个全局变量,如下所示:

#include "someclass1.h"
int g_something = 18;
SomeClass1::SomeClass1() {}

我的someclass2.cpp 尝试通过关键字extern 访问该全局变量:

#include "someclass2.h"
#include "../Proj1/someclass1.h"
#include <stdio.h>
extern int g_something;
SomeClass2::SomeClass2() {
    printf("g_something: %d\n", g_something);
}

当我尝试编译时,我收到 2 个错误:

Undefined symbols for architecture x86_64:
    "_g_something", referenced from:
        SomeClass2::SomeClass2() in someclass2.o ...

Undefined symbols for architecture x86_64:
    "_main", referenced from:
        start in crt1.10.6.o

  • 我知道第一个错误来自使用 someclass1 中的 g_something 没有正确链接 Proj1Proj2我不知道如何告诉链接器我使用的是其他子项目

  • 我猜第二个错误是因为我没有在项目Proj1 中定义主方法,但我不知道该怎么做,所以没有预期的主方法!

【问题讨论】:

    标签: c++ macos qt qmake subdirectory


    【解决方案1】:

    如果我理解你的正确,你尝试编译两个独立的应用程序 Proj1 和 Proj2。它们之间没有任何形式的联系。他们都应该有main(...) 功能。当然,在这种情况下你不能声明extern var。如果你想创建一个应用程序,那么你的子项目应该是一个库,其他子项目应该与它链接。然后你可以使用外部声明。

    Proj2.pro 声明TEMPLATE = lib。并在 Proj1 添加与此库的链接,例如 LIBS += -lProj2。当然你应该添加libproj2位置的路径。

    【讨论】:

    • 谢谢!这真的有助于我的项目运行!
    【解决方案2】:

    如果你想使用extern,你的 proj1 应该是lib,而不是app。 你的主项目应该添加ordered

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多