问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

Qt编译链接问题大汇总:社区支持来帮你!

创作时间:
作者:
@小白创作中心

Qt编译链接问题大汇总:社区支持来帮你!

引用
CSDN
11
来源
1.
https://blog.csdn.net/sincere_ly_/article/details/136715362
2.
https://blog.csdn.net/qq_28055315/article/details/140181822
3.
https://blog.csdn.net/qq_45216743/article/details/137018413
4.
https://blog.csdn.net/qfZYG/article/details/141362692
5.
https://blog.csdn.net/black_procedure/article/details/137082507
6.
https://blog.csdn.net/u014020707/article/details/138530346
7.
https://blog.csdn.net/bxlover007/article/details/139311484
8.
https://cloud.baidu.com/article/3290896
9.
https://www.cnblogs.com/txwtech/p/18548817
10.
https://www.cnblogs.com/apachecn/p/18343124
11.
https://forum.qt.io/topic/158046/qt-6-7-2-%E6%80%8E%E4%B9%88%E6%89%8D%E8%83%BD%E7%BC%96%E8%AF%91%E6%88%90%E5%8A%9F-%E6%90%9E%E4%BA%86%E4%B8%80%E4%B8%AA%E6%98%9F%E6%9C%9F%E4%BA%86-%E4%BB%8E6-4-0-%E5%88%B0-6-7-2-%E9%83%BD%E6%B2%A1%E4%B8%8D%E8%A1%8C-%E9%82%A3%E4%BD%8D%E9%AB%98%E4%BA%BA%E6%8C%87%E7%82%B9%E4%B8%8B

在Qt开发过程中,编译链接错误是开发者经常遇到的挑战。这些错误不仅会阻碍项目的顺利进行,还可能耗费大量的时间和精力。本文将汇总一些常见的Qt编译链接问题,并提供详细的解决方案,帮助开发者快速定位和解决问题。

01

常见编译链接错误及解决方案

1. MSB3073错误

错误信息:

error MSB3073: 命令“\bin\rcc.exe” --list “heavyicing.qrc” > “E:\cccc\SmartTools\src…\temp\Debug\rcc_list.txt” 2> nul”已退出,代码为 3。

错误原因:这个错误通常是由于项目.user文件与git端不一致导致的。

解决方案:

  • 打开记事本,将运行成功项目的.user文件内容复制到出错项目的.user文件中。注意不能直接拷贝文件,而是需要复制内容。

2. 无法解析的外部符号(LNK2019)

错误信息:

widget.obj:-1: error: LNK2019: 无法解析的外部符号 “__declspec(dllimport) pub

解决方案:

  • 检查项目属性中的依赖项:右键点击项目 -> 属性 -> 链接器 -> 输入 -> 附加依赖性,对比同事的项目,将缺失的依赖项添加进去。
  • 确保Qt模块正确添加:在当前文件的Qt设置中加入所需的模块。
  • 清理构建目录:删除整个build debug文件夹,重新编译项目。

3. 未定义的标识符

错误信息:

严重性 代码 说明 项目 文件 行 禁止显示状态
错误 LNK2019 无法解析的外部符号 "__declspec(dllimport) public: __cdecl book::book(void)" (__imp_??0book@@QEAA@XZ),函数 "void __cdecl std::_Construct_in_place<class book>(class book &)" (??$_Construct_in_place@Vbook@@$$V@std@@YAXAEAVbook@@@Z) 中引用了该符号

解决方案:

  • 禁用Intellisense:工具 -> 选项 -> 文本编辑器 -> C/C++ -> 高级 -> 将Intellisense中的禁用全部改为true。
  • 清空附加包含目录:项目 -> 配置属性 -> C/C++ -> 常规 -> 附加包含目录,清空或设置为"$(ProjectDir)"。
  • 确保SDK版本正确:如果是在VS环境下,确保安装了正确的Windows SDK版本。

4. libpng和libjpeg版本不一致警告

错误信息:

libpng warning: Application built with libpng-1.6.27 but running with 1.5.13
Wrong JPEG library version: library is 62, caller expects 80

解决方案:
在cmake时指定操作系统中libpng、libjpeg的全路径:

cmake -D WITH_JPEG=ON -D JPEG_LIBRARY=/usr/lib/aarch64-linux-gnu/libjpeg.so.8 -D JPEG_INCLUDE_DIR=/usr/include/ -D WITH_PNG=ON -D PNG_LIBRARY=/usr/lib/aarch64-linux-gnu/libpng16.so.16 -D PNG_INCLUDE_DIR=/usr/include/ ..

5. 全局忽略编译警告

在Qt中,可以通过在.pro或.pri文件中添加QMAKE_CXXFLAGS来全局忽略编译警告。例如:

将所有警告当作错误处理:

QMAKE_CXXFLAGS += -Werror=return-type //函数有返回值
QMAKE_CXXFLAGS += -Werror=return-local-addr //返回局部变量地址
QMAKE_CXXFLAGS += -Werror=missing-field-initializers //缺少初始值设定项
QMAKE_CXXFLAGS += -Werror=maybe-uninitialized //变量可能没有被初始化
QMAKE_CXXFLAGS += -Werror=delete-non-virtual-dtor //
QMAKE_CXXFLAGS += -Werror=unused-but-set-variable //设置了但未使用的变量
QMAKE_CXXFLAGS += -Werror=parentheses //括号不匹配
QMAKE_CXXFLAGS += -Werror=pointer-arith //指针用在了算术运算
QMAKE_CXXFLAGS += -Werror=reorder //警告构造函数的顺序不会被使用
QMAKE_CXXFLAGS += -Werror=format-extra-args //格式不对
QMAKE_CXXFLAGS += -Werror=format= //格式不对
QMAKE_CXXFLAGS += -Werror=unused-variable //未使用的变量

忽略特定警告:

QMAKE_CXXFLAGS += -Wno-unused-function //未使用的函数
QMAKE_CXXFLAGS += -Wno-unused-parameter //设置了但未使用的参数
QMAKE_CXXFLAGS += -Wno-comment //注释使用不规范。
QMAKE_CXXFLAGS += -Wno-sequence-point //如出现i=i++这类代码,则报警告
02

社区资源和工具推荐

在解决Qt编译链接问题时,可以充分利用以下社区资源和工具:

  1. Qt官方论坛:Qt官方网站提供了丰富的文档和论坛支持,是获取官方解决方案的首选渠道。

  2. CSDN:CSDN上有大量Qt开发者分享的经验和解决方案,可以通过搜索找到类似问题的解决方法。

  3. Stack Overflow:这是一个国际性的开发者问答社区,可以找到很多关于Qt编译链接问题的讨论。

  4. Qt Creator:Qt官方集成开发环境,提供了强大的项目管理和编译工具,可以帮助开发者快速定位问题。

  5. CMake:对于复杂的项目,使用CMake可以更方便地管理依赖关系和编译选项。

03

预防和最佳实践

为了减少编译链接问题的发生,建议遵循以下最佳实践:

  1. 清晰的环境变量管理:确保LD_LIBRARY_PATH等环境变量正确配置,避免版本冲突。

  2. 定期清理构建目录:每次编译前清理之前的构建文件,可以避免很多历史遗留问题。

  3. 版本控制:使用Git等版本控制工具,可以方便地回溯到之前稳定的版本。

  4. 模块化管理:将项目拆分为多个模块,每个模块独立编译,可以减少依赖关系的复杂性。

  5. 持续集成:使用CI/CD工具,如Jenkins或GitHub Actions,可以及时发现和解决问题。

通过以上方法,可以有效地预防和解决Qt编译链接过程中遇到的问题。希望本文能帮助Qt开发者更好地应对这些挑战,提高开发效率。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号