Qt中从MinGW编译器改到VS2017编译器的几个注意点

3 篇文章 1 订阅

具体的操作就不说了,网上有很多,这里主要讲注意点:

一、引用的库文件要改变

首先最基本的一点,既然从MinGW改到了VS编译器,那相应的调用的库也需要改变,同样一个库文件,比如a.lib文件,用MinGW还是VS编译产生的a.lib,是不通用的,即在MinGW编译器编译的a.lib和在VS编译的a.lib是不通用的,如果你改到了VS编译器,就要用VS编译产生的a.lib库文件。

二、工程文档的编码方式需要改变

这个也是踩了很多坑才晓得的,为什么命名一段代码在MinGW下跑起来没有任何问题,而到了VS编译器下跑起来一堆报错呢?启示这其中很多不是因为代码本身的问题,比如出现一些什么奇奇怪怪的,例如:

  1. 未声明的标志符
  2. 常量中有换行符
  3. 语法错误:缺少XXX

之类的报错,十有八九是你的工程文件,即 *.h 或者 *.cpp的编码方式不同导致的。
在MinGW编译器下,默认使用的编码方式是GBK,而在VS编译器,你需要将头文件和cpp文件改到Unicode,这样就能避免很多的问题。
注意!直接通过UltraEdit等软件改编码到Unicode,会出现一些意料之外的问题,介绍一个改编码的方式比较靠谱的方法。
比如要修改a.cpp的编码方式,打开一个记事本,然后将a.cpp的代码复制进去,然后另存为,选择Unicode编码方式,命名为a.cpp,覆盖,这样比较靠谱。

三、增减或者修改一些库文件

有些库文件是编译器自带的库文件,在另一个编译器中是不带的,这个时候,你可以改成一些通用的库文件,比如math.h,在MinGW下是自带的,但是在VS中好像没有(感觉不应该没有哈,但我这儿的情况就是没有),于是我就替换成QtMath这个库。

四、其他

  1. 定义一个数组,MinGW可以直接写int a[3],但是在VS中必须写成int *a=new int[3]
  2. 另外,网上有说对于界面文件的包含,即#include "ui_mainwindow.h"在MinGW中是写在mainwindow.cpp中的,而在VS中,要写在mainwindow.h中。这一点我感觉有点不靠谱。不过确实刚移植的时候,窗口文件修改以后不奏效,后来我是新建一个工程文件,将除了mainwindow和main以外的东西复制过去,再将界面里的内容复制过去来解决这个问题的。
Qt MinGW编译器为MSVC编译器需要进行以下步骤: 1. 首先,将项目的编码问题解决。可以使用Notepad++将文件编码转为usc-2 little endian编码或utf-8-bom编码格式,以解决文问题。 2. 解决编译器报错问题。如果在编译过程遇到类似于“qalgorithms.h:847: error: C3615: constexpr 函数 ‘qCountLeadingZeroBits’ 不会生成常数表达式”这样的错误,可以参考链接\[1\]提供的解决办法。 3. 解决乱码问题。如果在运行程序时遇到乱码,可以在代码添加以下语句来设置字符集: ``` #if _MSC_VER >= 1600 #pragma execution_character_set("utf-8") #endif ``` 这样可以确保程序以UTF-8字符集运行。 4. 切编译器。将Qt MinGW编译器为MSVC编译器,可以下载Windows下的OpenCV,并解压后找到build文件夹。在build文件夹,选择与你使用的Visual Studio版本对应的文件夹(如VC14或VC15),这些文件夹已经包含了编译好的库,可以直接使用而无需再进行编译\[2\]。 请注意,切编译器可能会导致一些依赖库的不兼容问题,需要确保项目的其他依赖项与新的编译器兼容。 参考资料: \[1\] https://codereview.qt-project.org/c/qt/qtbase/+/236948/2/src/corelib/tools/qalgorithms.h#864 \[2\] https://blog.csdn.net/cn_cc/article/details/122220232 \[3\] https://blog.csdn.net/weixin_43943902/article/details/103654051 #### 引用[.reference_title] - *1* [QT MinGw编译项目代码转msvc编译器报错等问题](https://blog.csdn.net/cn_cc/article/details/122221036)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [Qt编译器MinGW和MSVC的区别](https://blog.csdn.net/qq_43445867/article/details/127889570)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鱼月半

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值