【问题标题】:Qt 5.3.2 on Mac Snow Leopard: ld: symbol(s) not found for architecture x86_64 [clang, objective-c and c++]Mac Snow Leopard 上的 Qt 5.3.2:ld:未找到架构 x86_64 [clang、objective-c 和 c++] 的符号
【发布时间】:2020-04-24 15:19:15
【问题描述】:

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

我在 Snow Leopard (10.6.8) 和 Qt 5.3.2 上编译一个项目。

在我的程序的main 方法中,我检查它是否在mac 上并打开一个基于可可的窗口,否则创建标准的QApplicationMainWindow 配置。我有一个包含窗口代码的.mmobjective-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 兼容的提交。

为什么会出现这个错误?

【问题讨论】:

    标签: c++ objective-c macos qt osx-snow-leopard


    【解决方案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
    

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

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

    【讨论】:

      猜你喜欢
      • 2020-06-20
      • 2019-02-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-18
      • 1970-01-01
      • 1970-01-01
      • 2012-12-16
      相关资源
      最近更新 更多