首页 > 解决方案 > Mac Snow Leopard 上的 Qt 5.3.2:ld:未找到架构 x86_64 [clang、objective-c 和 c++] 的符号

问题描述

我阅读了许多相同性质的问题,但没有找到特定于我需要的东西。

我正在编译一个关于 Snow Leopard (10.6.8) 和 Qt 5.3.2 的项目。

在我的程序main方法中,我检查它是否在 mac 上并打开一个基于可可的窗口,否则创建标准QApplicationMainWindow配置。我有一个.mm包含窗口代码的objective-c类,当包含其相应的头文件时,它给了我这个错误:

Undefined symbols for architecture x86_64:
  "QMacApplication::QMacApplication()", referenced from:
      _main in main.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

我正在使用来自 QT 的官方 github repo 的修改代码qtmacextras,将可可窗口代码放入它自己的库中,我可以将其导入并在其他应用程序中使用。请参阅https://code.qt.io/cgit/qt/qtmacextras.git/tree/examples/macextras/macfunctions?h=5.14,尽管我使用的是 5.3.2 兼容的提交。

为什么我会收到此错误?

标签: c++objective-cmacosqtosx-snow-leopard

解决方案


正如其他问题所指出的那样,此错误可能来自缺少的框架。

但是这个特定错误的原因是我的项目pro文件中缺少一些行。我曾经OBJECTIVE_SOURCES包含我的.mm文件,但我没有包含OBJECTIVE_HEADERS我的头文件——即使它不包含任何 Objective-c 代码并且我已经在HEADERS指令中指定了它。

.pro这是我的文件的简明版本:

TARGET = QMacApplication
TEMPLATE = lib

QT       += widgets core macextras
QT_PRIVATE += gui-private core-private

QMAKE_CXXFLAGS_GNUCXX11 = -std=c++98
CONFIG -= c++11
load(qt_build_config)

ios {
    LIBS_PRIVATE += -framework UIKit
} else {
    LIBS_PRIVATE += -framework AppKit
}

SOURCES += \
    window.cpp

HEADERS += qmacapplication.h\
        qmacapplication_global.h \
    window.h

OBJECTIVE_SOURCES += qmacapplication.mm
OBJECTIVE_HEADERS += qmacapplication.h

qmacapplication.h当我从指令中删除它时它会编译HEADERS,但将它留在里面似乎也是安全的。

如果重要的话,这是使用 xcode 4.2。


推荐阅读