Qt 5.3.2 на Mac Snow Leopard: 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 для qtmacextras, помещая код окна какао в свою собственную библиотеку, которую я могу импортировать и использовать в других приложениях. См. https://code.qt.io/cgit/qt/qtmacextras.git/tree/examples/macextras/macfunctions?h=5.14, хотя я использую коммит, совместимый с 5.3.2.

Почему я получаю эту ошибку?


person NuclearPeon    schedule 07.01.2020    source источник


Ответы (1)


Эта ошибка может быть связана с отсутствием фреймворка, как указывалось в других вопросах.

Но причина этой конкретной ошибки заключалась в том, что мне не хватало некоторых строк в файле моего проекта 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, если это имеет значение.

person NuclearPeon    schedule 07.01.2020