我通读了许多相同性质的问题,但没有找到我需要的具体内容。
我正在编译一个关于雪豹(10.6.8(和Qt 5.3.2的项目。
在我的程序main
方法中,我检查它是否在 mac 上并打开一个基于 cocoa 的窗口,否则创建标准QApplication
和MainWindow
配置。我有一个包含窗口代码的.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存储库中的修改代码进行qtmacextras
,将cocoa窗口代码放入其自己的库中,我可以导入并在其他应用程序中使用。请参阅 https://code.qt.io/cgit/qt/qtmacextras.git/tree/examples/macextras/macfunctions?h=5.14,尽管我使用的是与 5.3.2 兼容的提交。
为什么我会收到此错误?
正如其他问题所指出的那样,此错误可能来自缺少的框架。
但是这个特殊错误的原因是我的项目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
当我从HEADERS
指令中删除qmacapplication.h
时,它会编译,但将其保留似乎也很安全。
如果重要的话,这是使用 xcode 4.2。