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

Qt6静态编译踩坑指南:VS更新帮你脱困!

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

Qt6静态编译踩坑指南:VS更新帮你脱困!

引用
CSDN
11
来源
1.
https://blog.csdn.net/aggs1990/article/details/139723748
2.
https://blog.csdn.net/aggs1990/article/details/144475996
3.
https://wiki.qt.io/Building_Qt_6_from_Git
4.
https://learn.microsoft.com/zh-cn/troubleshoot/developer/visualstudio/installation/unable-update-using-help-menu?source=recommendations
5.
https://forum.qt.io/topic/159798/msys2-qt6-8-mingw64-ucrt64-static-version-patch-and-qt5-15-windeployqt-fix
6.
https://wiki.archlinux.org/title/Qt
7.
https://wiki.qt.io/Cross-Compile_Qt_6_for_Raspberry_Pi
8.
http://dict.youdao.com/example/visual_visual_studio/
9.
https://m.pianwan.com/soft/91089
10.
https://forum.qt.io/topic/156328/qt-qpa-plugin-could-not-find-the-qt-platform-plugin
11.
https://forum.qt.io/topic/159772/some-doubts-about-linux-deployment

Qt6静态编译是许多开发者在开发跨平台应用程序时的必备技能。然而,在实际操作中,经常会遇到各种令人头疼的问题。本文将分享一些实用的解决方案,帮助你顺利解决静态编译过程中遇到的难题。

01

环境准备

在开始Qt6静态编译之前,确保你的开发环境满足以下要求:

  • Git版本 >= 1.6.x
  • CMake版本 >= 3.21.1(对于Qt 6.2+的静态构建)
  • 支持C++17的C++编译器
  • Python >= 2.6.x
  • Windows平台需要Visual Studio 2022或2019,推荐使用最新版本

特别注意:从Qt 6.8开始,Windows平台已全面转向MSVC2022,因此建议使用VS2022以获得最佳兼容性。

02

常见问题及解决方案

qmake配置问题

在MSYS2环境下使用Qt6静态版本时,可能会遇到链接错误,错误信息类似于:

C:/msys64/ucrt64/bin/../lib/gcc/x86_64-w64-mingw32/14.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:/msys64/ucrt64/bin/../lib/gcc/x86_64-w64-mingw32/14.2.0/../../../../lib\libharfbuzz.a(hb-graphite2.cc.obj):(.text+0x18c): undefined reference to `gr_make_face_with_ops'

解决方案是在.pro文件中添加以下配置:

contains(QT, widgets){
    MSYSTEM_PREFIX=$$(MSYSTEM_PREFIX)
    greaterThan(MSYSTEM_PREFIX,' '){
        contains(CONFIG, static) {
            message ("Perform Qt6 Static library with MSYS2 patch.")
            CONFIG += no_lflags_merge
            # for 2023 version , 2024-11 not needed:
            # LIBS += -ltiff  -lmng -ljpeg -ljbig -ldeflate  -lzstd -llerc -llzma  -lgraphite2 -lbz2 -lusp10 -lRpcrt4 -lsharpyuv -lOleAut32
        }
    }
}

CMake配置问题

使用CMake时,可能会遇到以下错误:

ninja: error: '/ucrt64/lib/libuiautomationcore.a', needed by 'helloWorld.exe', missing and no known rule to make it

解决方案是修改以下4个文件:

  • C:\msys64\mingw64\qt6-static\lib\cmake\Qt6Gui\Qt6QWindowsIntegrationPluginTargets-release.cmake
  • C:\msys64\mingw64\qt6-static\lib\cmake\Qt6Gui\Qt6QWindowsDirect2DIntegrationPluginTargets-release.cmake
  • C:\msys64\ucrt64\qt6-static\lib\cmake\Qt6Gui\Qt6QWindowsIntegrationPluginTargets-release.cmake
  • C:\msys64\ucrt64\qt6-static\lib\cmake\Qt6Gui\Qt6QWindowsDirect2DIntegrationPluginTargets-release.cmake

将其中的绝对路径修改为相对路径,例如:

INTERFACE_LINK_LIBRARIES "...;libuiautomationcore.a;\$<LINK_ONLY:uuid>"
03

最佳实践

  1. 保持工具链更新:确保所有工具(如CMake、Visual Studio、MSYS2)都是最新版本,这可以避免许多兼容性问题。

  2. 合理组织项目结构:将第三方库和Qt库的路径清晰地组织在项目配置中,避免路径过长导致的问题。

  3. 使用环境变量:通过环境变量管理不同构建配置的路径,可以使项目配置更加灵活。

  4. 详细记录构建日志:遇到问题时,详细记录构建日志可以帮助快速定位问题。

04

总结

Qt6静态编译虽然过程复杂,但通过合理的配置和工具链管理,可以有效避免许多常见问题。希望本文分享的解决方案能帮助你在开发过程中少走弯路。如果在实际操作中遇到其他问题,欢迎在Qt官方论坛或邮件列表中寻求帮助。

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