Mac Snow Leopard 上的 Qt 5.3.2:ld:未找到架构 x86_64 [clang,objective-c 和 c++] 的符号
Qt 5.3.2 on Mac Snow Leopard: ld: symbol(s) not found for architecture x86_64 [clang, objective-c and c++]
我通读了许多性质相同的问题,但没有找到适合我需要的内容。
我正在 Snow Leopard (10.6.8) 和 Qt 5.3.2 上编译一个项目。
在我程序的 main
方法中,我检查它是否在 mac 上并调出基于 cocoa 的 window,否则创建标准 QApplication
和 MainWindow
配置。我有一个 .mm
objective-c class 包含 window 代码,当包含其相应的头文件时,它给了我这个错误:
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)
我正在为 qtmacextras
使用 QT 官方 github 存储库中的修改代码,将 cocoa window 代码放入它自己的库中,我可以在其中导入和使用其他应用程序。请参阅 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。
我通读了许多性质相同的问题,但没有找到适合我需要的内容。
我正在 Snow Leopard (10.6.8) 和 Qt 5.3.2 上编译一个项目。
在我程序的 main
方法中,我检查它是否在 mac 上并调出基于 cocoa 的 window,否则创建标准 QApplication
和 MainWindow
配置。我有一个 .mm
objective-c class 包含 window 代码,当包含其相应的头文件时,它给了我这个错误:
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)
我正在为 qtmacextras
使用 QT 官方 github 存储库中的修改代码,将 cocoa window 代码放入它自己的库中,我可以在其中导入和使用其他应用程序。请参阅 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。