c++ - 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 上并打开一个基于可可的窗口,否则创建标准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 repo 的修改代码qtmacextras
,将可可窗口代码放入它自己的库中,我可以将其导入并在其他应用程序中使用。请参阅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
qmacapplication.h
当我从指令中删除它时它会编译HEADERS
,但将它留在里面似乎也是安全的。
如果重要的话,这是使用 xcode 4.2。
推荐阅读
- flyway - 有什么方法可以根据已安装的排名而不是版本撤消 Flyway 吗?
- reactjs - 在 React 中没有从 useHistory 接收道具
- python - Python/Pandas Str.split 在没有拆分时返回 NAN
- spring-boot - 如何跟踪用户活动并将其发送到数据库
- regex - 如果字符串包含列表中的单词,则从字符串中提取单词
- excel - 如何强制 Active-X 组合框从溢出的数组中刷新其下拉列表
- excel - VBA - 根据工作表标签颜色更改特定单元格值的字体颜色
- ruby - 如何从模块下的目录中移动所有类?
- keras - 相同的 LSTM(GRU)实现不同的结果(pytorch 和 keras)
- rx-java - 根据发射项的索引将 Observable 拆分为多个 Observable