You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Qt开发x86_64架构下Undefined Symbols链接错误求助

解决Qt+C++中"Undefined symbols for architecture x86_64: Widget::set(QJsonObject)"链接错误

以下是针对性的排查和解决步骤:

  • 检查函数声明与实现的一致性
    确认Widget类头文件中set(QJsonObject)的声明与源文件中的实现完全匹配:

    • 头文件声明示例:void set(QJsonObject);
    • 源文件实现必须带类作用域,且参数类型一致:
      void Widget::set(QJsonObject obj) {
          // 实现代码
      }
      

    注意不能遗漏Widget::前缀,也不能出现参数类型不匹配(比如误写为QJsonDocument或QJsonValue)。如果是槽函数,需确保头文件中用slots:/public slots:标记。

  • 彻底清理构建并重新生成MOC文件

    1. 在Qt Creator中执行Build > Clean All
    2. 手动删除项目目录下的build-开头的构建文件夹
    3. 重新执行Build > Run qmake,再编译项目
      旧的moc缓存文件可能导致链接时找不到正确的函数实现,彻底清理后重新生成可以解决这类问题。
  • 检查.pro项目文件配置

    • 确保所有包含set函数实现的源文件被添加到SOURCES列表,比如:SOURCES += widget.cpp
    • 确认已添加Qt JSON模块:QT += core gui network json,缺少模块可能间接导致类型相关的链接问题。
  • 核对编译架构设置
    在Qt Creator的项目构建配置中:

    • 确认构建目标架构为x86_64(与错误提示的架构一致)
    • 检查Build Settings > Compiler > C++ Compiler的架构选项,确保与Qt安装包的架构匹配(Mac上Qt分x86_64和arm64版本)
  • 排查信号槽参数匹配问题
    如果set函数是作为槽函数被调用,确认关联的信号参数类型与槽函数完全一致,参数不匹配会导致moc生成错误的调用代码,进而触发链接错误。

内容的提问来源于stack exchange,提问作者harley

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 16:25:22