• Windows下的Qt编译器 MinGW和MSVC的区别


    • MSVC:
      即Microsoft Visual C++ Compiler,即微软自己的编译器
      我们下载Windows下的OpenCV时,会带两个文件夹VC14,VC15(分别与Visual Studio的版本有对应关系),这两个文件夹下的库可以直接运行不需要编译
      将VS作为Qt的开发环境也是使用这个编译器的缘故

    • MinGW:
      我们都知道GNU在Linux下面鼎鼎大名的gcc/g++,MinGW则是指Minimalist GNU for Windows的缩写
      它是将GNU开发工具移植到Win32平台下的产物,即一套Windows上的GNU工具集
      用其开发的程序不需要额外的第三方DLL支持就可以在Windows下运行,相对地,不使用动态库导致的就是编译出来的程序大很多。也是可以设置使用静态库的

    Qt 用 MSVC 和 MinGW 哪个编译器编译程序比较好?

    请问在开发 Qt 程序时,MSVC 与 MinGW 两种编译器哪种更易于上手、出现 bug 的概率低些呢?

    我的建议是使用MSVC。

    理由一:qtcreator的debuger有功能缺陷,经常会出现变量无法查看的问题,棘手的bug还是需要在VS环境下进行调试。很多人的开发模式就是qtcreator写代码,VS下面做调试。

    理由二:MinGW无法直接生成PDB文件,这导致如果软件闪退,无法利用生成的dump文件在windbg或VS下面定位到出错的代码。(有各种奇技淫巧可以在windows下面对mingw版本进行dump调试,但有这功夫直接安装个VS 2017显然更香)。

    理由三:我的经验告诉我,MinGW编译出的软件总会有奇怪的无法运行现象。

    实战经历1:Scene3D在MinGW64位Release和MinGW32位Debug模式下运行直接闪退,而64位Debug和32位Release却正常运行。

    实战经历2:动态删除继承QuickItem的对象,有几率导致非法内存访问,可以定位到问题在Qt源码中Renderer中的一处。

    类似以上例子的幺蛾子在我切换到MSVC之后不再出现,我甚至怀疑QT的开发人员在windows下更倾向于MSVC进行测试,导致我上报的MinGW中发现的bug都无法被他们重现并重视。

    关于第三点再做补充,我认为在任何平台下,越贴近原生的东西总能得到更多的优化,MinGW始终不是Windows亲生的,bug比亲生的VS多很正常。

    对于另一个回答中提到的MSVC中rc文件编译失败重新编译没问题这种情况,根本不能称之为编译器bug,我更愿意把它称之为玄学。

    真正令人不安的是由于不同编译器之间,或同个编译器Release、Debug模式之间,指针初始化或指针回收处理的差异,以及官方的开发人员没有进行详尽的测试,最终导致的野指针非法访问问题。甚至官方example使用MinGW编译都存在无法运行的现象,让我有理由相信官方团队对MinGW环境做的测试不够详尽。

  • 相关阅读:
    [dubbo实战] dubbo+zookeeper伪集群搭建
    Spring中使用Map、Set、List、数组、属性集合的注入方法配置文件
    Docker实践
    docke镜像上传到dockerhub仓库和阿里云docker仓库的方法
    Linux chmod命令详解
    使用nexus搭建maven私服
    Zookeeper注册节点的掉线自动重新注册及测试方法
    Dubbo负载均衡策略
    各种排序算法及其java程序实现
    java中的各种数据类型在内存中存储的方式
  • 原文地址:https://www.cnblogs.com/ybqjymy/p/16550863.html
Copyright © 2020-2023  润新知