解决2024-11版本MSYS2 Qt6.8 mingw64/ucrt64 static错误和windeployqt的小问题

很久没有pacman我的msys2了,今天当我升级MSYS2 到2024年11月时,静态编译的UCRT64 和MingW64 版本的Qt6 都不工作了, 此外 Qt5 的 windeployqt也有依赖问题。解决:

文章目录

  • 1. qmake 静态编译附加库和 --no-merge 选项.
    • 1.1 报错信息:
    • 1.2 原因和解决
  • 2.CMake 找不到 libuiautomationcore.a 的解决
    • 2.1 报错信息和解决
    • 2.2 原因分析:
  • 3. windepolyqt 对 GLES 库的依赖

1. qmake 静态编译附加库和 --no-merge 选项.

1.1 报错信息:

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'
//...a lot

1.2 原因和解决

目前,尽管Qt6是静态编译的,但是很多依赖库不是静态的. QMake需要指定额外的依赖. 更进一步,因为库之间依赖的复杂性,需要禁用g++ 对库的重名合并功能(merge). 具体做法是加入这个代码到pro文件里去:

#Qt6 Widgets static link in MSYS2 need extra dependencies.
contains(QT, widgets){
MSYSTEM_PREFIX=$$(MSYSTEM_PREFIX)
greaterThan(MSYSTEM_PREFIX,' '){
contains(CONFIG, static) {message ("Perform Qt6 Static library with MSYS2 patch.")CONFIG += no_lflags_mergeLIBS += -ltiff  -lmng.dll -ljpeg -ljbig -ldeflate  -lzstd -llerc -llzma  -lgraphite2 -lbz2 -lusp10 -lRpcrt4 -lsharpyuv -lOleAut32
}
}
}

2.CMake 找不到 libuiautomationcore.a 的解决

要修改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\mingw64\qt6-static\lib\cmake\Qt6Gui\Qt6QWindowsIntegrationPluginTargets-release.cmake
C:\msys64\mingw64\qt6-static\lib\cmake\Qt6Gui\Qt6QWindowsDirect2DIntegrationPluginTargets-release.cmake

2.1 报错信息和解决

报错:

 "C:\msys64\ucrt64\bin\cmake.exe" --build B:/codes/helloWorld/build/Desktop_Qt_6_8_0_static_MinGW_w64_UCRT64_MSYS2-Release --target allninja: error: '/ucrt64/lib/libuiautomationcore.a', needed by 'helloWorld.exe', missing and no known rule to make it

解决:把四个文件里 libuiautomationcore.a 的路径去掉,只留文件名。

raw:  INTERFACE_LINK_LIBRARIES "...;/ucrt64/lib/libuiautomationcore.a;\$<LINK_ONLY:uuid>"

fix:

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

2.2 原因分析:

尽管 msys2 支持类似Linux的虚拟路径,.但是cmake是从子进程的 cmd.exe 启动的,这个环境不懂 /ucrt64 是个啥。既然 msys2 已经根据当前环境配置了 lib 搜索路径,不如就直接删掉具体的绝对路径,让编译器自己找。

3. windepolyqt 对 GLES 库的依赖

这个问题发生在 qt5.15 身上. Windeployqt 需要安装 mingw-w64-ucrt-x86_64-angleproject 和 mingw64/mingw-w64-x86_64-angleproject才能运行完毕,否则会中途退出:

$ windeployqt /c/Test/helloWorld.exe
C:\Test\helloWorld.exe 64 bit, release executable
Adding Qt5Svg for qsvgicon.dll
Skipping plugin qtvirtualkeyboardplugin.dll due to disabled dependencies (Qt5Qml Qt5Quick).
Skipping plugin qtvirtualkeyboard_hangul.dll due to disabled dependencies (Qt5Qml Qt5Quick).
Skipping plugin qtvirtualkeyboard_openwnn.dll due to disabled dependencies (Qt5Qml Qt5Quick).
Skipping plugin qtvirtualkeyboard_pinyin.dll due to disabled dependencies (Qt5Qml Qt5Quick).
Skipping plugin qtvirtualkeyboard_tcime.dll due to disabled dependencies (Qt5Qml Qt5Quick).
Skipping plugin qtvirtualkeyboard_thai.dll due to disabled dependencies (Qt5Qml Qt5Quick).
Direct dependencies: Qt5Core Qt5Widgets
All dependencies   : Qt5Core Qt5Gui Qt5Widgets
To be deployed     : Qt5Core Qt5Gui Qt5Svg Qt5Widgets
Updating Qt5Core.dll.
Updating Qt5Gui.dll.
Updating Qt5Svg.dll.
Updating Qt5Widgets.dll.
C:\msys64\ucrt64\bin\libGLESv2.dll does not exist.

直接安装这两个库即可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/20194.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

统⼀数据返回格式快速⼊⻔

为什么会有统⼀数据返回&#xff1f; 其实统一数据返回是运用了AOP&#xff08;对某一类事情的集中处理&#xff09;的思维。 优点&#xff1a; 1.⽅便前端程序员更好的接收和解析后端数据接⼝返回的数据。 2.降低前端程序员和后端程序员的沟通成本&#xff0c;因为所有接⼝都…

第7章硬件测试-7.6 量产可靠性测试

7.6 量产可靠性测试 7.6.1 生产小批量测试7.6.2 装备测试7.6.3 器件一致性测试7.6.4 工艺规程和单板维修技术说明 产品量产阶段需要通过可靠性测试来保障产品的可靠性。 7.6.1 生产小批量测试 生产小批量测试是发货之前的批量压力测试&#xff0c;有两个目的&#xff1a;一是…

可编辑的 SALV 模型(克服 SALV 模型的限制)

我们都知道 ABAP Object 比传统的 ABAP 非常强大。在这里&#xff0c;我想分享我使用 ABAP 对象克服 SALV mdoel 限制的最佳实验之一。 起源 最初&#xff0c;我在 SCN 上发布了这篇文章 – ABAP 对象的强大功能&#xff1a;克服 SALV 模型的限制&#xff0c;它也受到了很多批…

通过shell脚本分析部署nginx网络服务(详细易懂)

通过shell脚本分析部署nginx网络服务 要求&#xff1a; 接收用户部署的服务名称判断服务是否安装 已安装&#xff1b;自定义网站配置路径为/www&#xff1b;并创建共享目录和网页文件&#xff1b;重启服务 没有安装&#xff1b;安装对应的软件包测试&#xff1a; 判断服务是否…

H.265流媒体播放器EasyPlayer.js H5流媒体播放器如何验证视频播放是否走硬解

随着技术的不断进步和5G网络的推广&#xff0c;中国流媒体播放器行业市场规模以及未来发展趋势都将持续保持稳定的增长&#xff0c;并将在未来几年迎来新的发展机遇。流媒体播放器将继续作为连接内容创作者和观众的重要桥梁&#xff0c;推动数字媒体产业的创新和发展。 EasyPla…

【 LVGL】用外部FLASH存储字库并显示

LVGL–用外部FLASH存储字库并显示 应用场景 由于使用的芯片内部FLASH空间有限&#xff0c;如果仅使用英文字库并用不了多少空间&#xff0c;但是项目需要支持中英文字库&#xff0c;中文字库添加2w字左右&#xff0c;10px大小就要1M多了&#xff0c;内部空间根本不够用&#…

含284个数据集,覆盖18项临床任务,上海AI Lab等发布多模态医疗基准GMAI-MMBench

「有这样一台智能医疗设备&#xff0c;患者只需躺在智能医疗设备上便可完成从扫描、诊断、治疗、修复的全过程&#xff0c;实现健康的重启」。这是 2013 年上映的科幻电影「极乐空间」中的一个情节。 电影《极乐空间》场景 如今&#xff0c;随着人工智能技术的飞速发展&#xf…

Java-04

目录 Redis如何实现延时队列 延时队列的组成 生产消息 消费消息 实现细节 Redis集群 Integer.compare(a[1], b[1]))与a[1] - b[1]) 设计模式​编辑 算法 Redis如何实现延时队列 使用 sortedset &#xff0c;拿时间戳作为 score &#xff0c;消息内容作为 key 调用 zad…

【C++】— 掌握STL vector 类:“Vector简介:动态数组的高效应用”

文章目录 1.vector的介绍和使用1.1vector的介绍1.2 vector的特点1.3vector的使用1.3.1vector的定义1.3.2vector iterator的使用1.3.3vector 的空间增长问题1.3.4 vector 的增删查改1.3.5vector 迭代器失效问题 1.vector的介绍和使用 1.1vector的介绍 vector是一个顺序容器&am…

CSS3中的伸缩盒模型(弹性盒子、弹性布局)之伸缩容器、伸缩项目、主轴方向、主轴换行方式、复合属性flex-flow

简介&#xff1a; 1.伸缩盒模型简介 2.伸缩容器、伸缩项目 3-4.主轴方向 5.主轴换行方式 6.复合属性flex-flow 7.主轴的对齐方式

互联网数字化商品管理浪潮思考:从信息化到精准运营

目录 一、商品数字化转型面临的现状分析 &#xff08;一&#xff09;运营方向分析 &#xff08;二&#xff09;商品归类分析 二、商品数字化管理建设分析 三、基础建设——商品信息数字化 &#xff08;一&#xff09;商品信息质量数字化的目的 &#xff08;二&#xff0…

STL关联式容器之RB-tree(红黑树)

AVL-tree之外&#xff0c;另一个颇具历史并被广泛运用的平衡二叉搜索树是RB-tree&#xff08;红黑树&#xff09;。所谓RB-tree&#xff0c;不仅是一颗二叉搜索树&#xff0c;而且必须满足一下规则&#xff1a; 1&#xff1a;每个节点不是红色就是黑色 2&#xff1a;根节点为…

电脑系统重装小白教程

​对于很多电脑用户来说&#xff0c;系统出现故障或者需要清理时&#xff0c;重装系统是一项不可避免的操作。但是&#xff0c;对于没有技术基础的小白用户而言&#xff0c;重装系统可能会显得复杂且困难。本文将为您提供一份简洁易懂的电脑系统重装教程&#xff0c;帮助您顺利…

使用Ollama和Open WebUI管理本地开源大模型

Open WebUI和Ollama介绍 Open WebUI 是一个功能丰富且用户友好的自托管 Web 用户界面&#xff08;WebUI&#xff09;&#xff0c;它被设计用于与大型语言模型&#xff08;LLMs&#xff09;进行交互&#xff0c;特别是那些由 Ollama 或与 OpenAI API 兼容的服务所支持的模型。O…

Nmap识别MongoDB 6.0指纹

Nmap识别MongoDB 6.0指纹 朋友反馈一个问题&#xff0c;说使用Nmap扫描MongoDB服务时对于6.0以上的版本默认无法识别到服务版本信息。 如上图所示&#xff0c;对应的VERSION信息是空的&#xff0c;在提示信息中可以看到&#xff0c;官方推荐将指纹信息上传以帮助更新服务指纹&…

向量搜索工具之 Milvus vs. Elastic

在当今数据驱动的世界中&#xff0c;向量数据库因其在处理大规模非结构化数据方面的卓越能力而变得越来越重要。随着数据量的爆炸性增长&#xff0c;如何确保这些数据库在存储和检索数十亿数据点时仍能保持高性能&#xff0c;成为了一个关键挑战。 Milvus和Elasticsearch都是管…

Java中日志采集框架-JUL、Slf4j、Log4j、Logstash

1. 日志采集 日志采集是指在软件系统、网络设备、服务器或其他IT基础设施中自动收集日志文件和事件信息的过程。这些日志通常包含了时间戳、事件类型、源和目标信息、错误代码、用户操作记录等关键数据。日志采集的目的是为了监控系统运行状态、分析系统性能、审计用户行为、故…

每日学习记录003:(C++)unique_ptr和shared_ptr

每日学习记录003&#xff1a;&#xff08;C&#xff09;unique_ptr和shared_ptr 在C中&#xff0c;unique_ptr和shared_ptr都是智能指针&#xff0c;它们为动态内存管理提供了更安全、更方便的方式。 一、unique_ptr的特点 &#xff08;一&#xff09;独占所有权 unique_pt…

免费实用的图片加水印工具

高度自定义的图片加水印工具 因工作需要和朋友的需求&#xff0c;我基于canvas开发了这款图片加水印工具。 地址&#xff1a;https://potatotools.top/toolsEntrance/pic/ImageWatermark.vue.html 功能亮点 尺寸定制 &#xff0c;轻松调整水印宽高&#xff0c;精准适配每张图…

数字化工厂 MES 成功之艰:深度剖析与探究

系统集成的复杂性 多源异构系统对接难题 在数字化工厂的建设进程中&#xff0c;MES&#xff08;制造执行系统&#xff09;处于核心枢纽地位&#xff0c;需与众多不同来源、不同架构的系统进行集成。企业内部往往早已部署了诸如企业资源计划&#xff08;ERP&#xff09;系统、…