• VS_Qt 常见错误(持续更新)


    VS+QT需要获得.ui对应的ui_XXXX.h头文件的解决方法

    解决办法:

    (1)在 Qt5.11.25.11.2mingw53_32in 目录下有对应的 uic.exe 用来生成 .ui 对应的 ui_XXXX.h 头文件,所以 cmd 进入 bin 目录,运行uic XXXX.ui ui_XXXX.h就可以生成。

    (2)在 VS 下,右键 .ui 文件 -> "编译",就会生成对应的 ui_XXXX.h 头文件,但默认的 ui_XXX.h 输出目录是$(IntDir)uic\%(RelativeDir),在工程所在的 Debuguic 目录下,而实际需要修改在自定义的 GeneratedFiles 目录下,右键 .ui 文件 -> "配置属性" -> “uic”,修改输出目录为GeneratedFiles


    QT -1: error: [debug/qrc_images.cpp] 异常解决

    运行报错:

    -1: error: [debug/qrc_images.cpp]
    

    解决办法:
    右键 .qrc 文件,点击 open in editor 后出现的红色就是误删遗留下来的问题,删掉重新编译即可。


    问题:
    在用 VS2015 编译网上别人的源码时,出现了 LINK : fatal error LNK1158: 无法运行“rc.exe” 的问题。

    解决方法:
    打开 C:Program Files (x86)Windows Kits10in10.0.17763.0x64 文件夹(找不到可以用 Everything 搜 "rc.exe"),复制里边的 “rc.exe” 和 "rcdll.dll",拷贝到 VS2015 的 VC 下的 bin 目录下,我的是 E: echnologyVS 2015VCin,重新 build 即成功。
    (这个问题应该是最近对 VS 进行过修改,或者环境变量变了,其实将这个路径加到环境变量的 PATH 中去也是可以的)


    undefined reference to `vtable for’”问题的原因及解决方法

    原因:

    Qt 中,类要支持信号与槽机制,需要继承自 QObject 并在头文件开头添加 Q_OBJECT 宏。
    如果使用 QtCreator 创建类时,没有选择继承自 QObject 类或其子类,而在创建后手工修改继承自 QObject 并手动添加 Q_OBJECT 宏,则在编译时有可能会出现 ”undefined reference to `vtable for’…….” 错误.

    **解决方法: **

    把新创建的类从项目中移除(主要不要从磁盘上删除),然后再添加进来,QtCreator就会重新解析此类,再编译就不再会出现上述错误。


    Qt Creator提示无法用“UTF-8”编码解码,无法编辑

    问题:

    在 Qt Creator 里打开其他编辑器的代码时,有时会提示无法用 “UTF-8” 编码解码,无法编辑。

    解决方法:

    (1)找到源文件,在文件上右键使用 Notepad++ 编辑器打开,选择 ---> “编码” --->“转为UTF-8编码”

    (2)windows环境下,Qt Creator,菜单 -> 工具 -> 选项 -> 文本编辑器 ->行为 -> 文件编码:默认编码:System(简体中文Windows系统默认指的是GBK编码,即下拉框选项里的GBK/windows-936-2000/CP936/windows-936)


    error LNK2019: 无法解析的外部符号 __imp__recv@16,该符号在函数 _*** 中被引用

    出现这个错误,一般都是缺少了相关的库文件,可以右键点击项目,选择属性,选择链接器,选择输入,选择附加依赖项,在依赖项里添加相应的库文件,这里是 ws2_32.lib 文件,然后就可以了。


    error: unknown type name 'class' 的解决方法

    编译工程时出现以下错误:

    error: unknown type name 'class'
    

    原因:

    C 文件 include 了带有 C++ 关键字的头文件,如 class 等。因此,包含 C++ 关键字的头文件被 C 编译器所编译,而不是用 C++ 编译器编译,而 C 编译器无法识别 C++ 的关键字,所以报错。

    解决方法:

    1、不能在 C 文件中包含 C++ 的头文件,所以需要将 .c 改成 .cpp。

    2、在所有使用 C++ 方法的地方加上:#ifdef __cplusplus,如:

    #ifdef __cplusplus
    
    class A{
    
    };
    
    #endi
    

    注:如果使用了 extern "C" ,也要加上 #ifdef __cplusplus,因为 C 编译器无法识别 extern "C"。


    fatal error C1083: 无法打开包括文件:“unistd.h”: No such file or directory

    许多在 Linux 下开发的 C 程序都需要头文件 unistd.h,但 VC 中没有个头文件,所以用 VC 编译总是报错。把下面的内容保存为 unistd.h,可以解决这个问题。

    #ifndef _UNISTD_H
    #define _UNISTD_H
    
    #include <io.h>
    #include <process.h>
    
    #endif /* _UNISTD_H */
    

    fatal error LNK1281: 无法生成 SAFESEH 映像

    解决方法:

    1.打开该项目的“属性页”对话框。

    2.单击“链接器”文件夹。

    3.单击“命令行”属性页。

    4.将 /SAFESEH:NO 键入“附加选项”框中,然后点击应用。


    找不到Qt5Cored.dll

    Qt5Cored.dll 和 Qt5Core.dll 文件分别用于 Qt 软件的 Debug 版和 Release 版。

    通常会有两个 Qt5Core.dll 文件,分别位于 Qt 安装目录下的 “Qt5.11.25.11.2mingw48_32in” 和 “Qt5.11.2ToolsQtCreatorin” 两个目录中。其中 “Qt5.11.25.11.2mingw48_32in” 目录下才是 Qt 项目运行时所需的库。

    但是,有时候在运行 Release 版项目时,却提示没有找到 Qt5Cored.dll。这是由于在编译 Release 版时,错误的链接到了 Debug 版的库上。这种情况主要发生在使用了第三方软件库的时候,在编译第三方软件库时,Debug 版本库链接到 Qt 的 Qt5Cored.dll,而 Release 版链接到 Qt5Core.dll,如果在编译 Release 版项目时错误的链接了第三方软件库的 Debug 版,则也会间接的链接 Debug 版的相关支持库(如 Qt5Cored.dll),因此在运行项目时提示需要相关的 Debug 版支持库。

    举个例子:在编译 Release 版项目时,工程文件中有 “#LIBS += D:/Qwt-6.1.0/lib/qwtd.dll”(这是 QWT 库,QWT 库需要 QT 库的支持),则在运行时提示 “找不到Qt5Cored.dll文件”,这时将其修改为 “#LIBS += D:/Qwt-6.1.0/lib/qwt.dll” 则解决问题。


    正确解决:坑爹的0xc000007b——应用程序无法正常启动

    (1)根本原因是缺乏所需要的 DLL,提供了错误版本的 dll 相当于没有 DLL, 提示完全一样。

    (2)网上有人说缺乏 dx 运行环境,如果属实,也是因为缺乏 dx 相关的 dll。

    (3)与程序是 32 还是 64 位没有直接关系,但是与你的程序对应不上的 dll 版本,往往很难发现问题,要引起注意。

    (4)生成的 debug 目录下,运行 exe 文件报改错,将缺少的 dll 文件添加进来即可解决,例如 opencv_world411d.dll。


    弹窗崩溃:abort() has been called 错误分析及其解决方法

    调试代码的过程中经常会遇到 abort() has been called 的错误,导致出现这样的原因有:

    (1)内存泄漏,导致内存不够分配;

    (2)非法指针访问或者指针访问内存越界出现问题;
    (3)多线程访问资源出的问题。

    参考:R6010 -abort() has been called错误分析及其解决方法


    This application failed to start because it could not find or load the Qt platform plugin “windows” 错误解决方法

    用 inno setup 打包生成了一个安装 exe,U 盘拷到另一台电脑安装运行,出现该错误!

    根据错误提示发现是和 platform 有关,是因为前面误删了安装目录下的 platforms 文件夹以及其内部的 qwindows.dll,把 plugins/platform 这个文件夹原封不动地复制到安装包里再打包即可。


    Qt中文乱码问题

    方法一:

    ui->pushButton->setText(QString::fromLocal8Bit("我是中文"));
    

    方法二:

    将默认字体设置为 UTF8,再配合 tr("我是中文") 就不会乱码啦。


    解决Qt线程关闭问题!QThread: Destroyed while thread is still running

    耗时操作里面这样判断:

     while (!isInterruptionRequested())
    

    添加析构函数,析构函数里面这样操作:

    XXXThread:: ~XXXThread()
    {
        requestInterruption();
        quit();
        wait();
    }
    

    给放在 Program Files 目录下的 exe 添加写入权限

    由于 exe 会在本目录下,写入 .ini 文件,如果把 exe 制作成安装包,会安装到 program files 目录下,但在 win10 下 program files 默认是没有写入权限的。

    解决方法:

    vs => 项目属性 =>配置属性 => 链接器 => 清单文件 =>UAC执行级别修改成 requireAdministrator。


    error LNK2001:无法解析的外部符号_imp_timeGetTime@0

    解决方法:将库winmm.lib添加到工程中。

    参考:error LNK2001:无法解析的外部符号_imp_timeGetTime@0

    error LNK2019: 无法解析的外部符号


    加入头文件出现 chrono 和 ratio 的错误

    在一个使用 FFmepg 的多线程工程中加入 librtmp 第三方开源库,在 chrono 和 ratio 中就会报二十多个错误,尤其是 C4430错误,“C4430 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int” 这个错误,在网上找了很多方法均不行,直到找到这个解决办法,前提是先include <stdint.h>

    VS => 项目属性 =>配置属性 => C/C++ => 预处理器中加入: __STDC_LIMIT_MACROS

    扩展:c++ - C++: __STDC_LIMIT_MACROS__STDC_CONSTANT_MACROS意味著什麼?

    __STDC_LIMIT_MACROS__STDC_CONSTANT_MACROS 是一种解决办法,允许 C++ 程序使用标准中指定的stdint.h 宏,而不在 C++ 标准中。 宏( 如 UINT8_MAXINT64_MININT32_C() ) 可能已经在 C++ 应用程序中定义为其他方式。 为了允许用户口決定是否需要为 C 定义宏,许多实现需要在 stdint.h 包含之前定义 __STDC_LIMIT_MACROS__STDC_CONSTANT_MACROS

    参考:

    加入头文件出现ratio和chrono的错误

    每个C11和C ++ 11,<stdint.h>不应查看__STDC_LIMIT_MACROS或__STDC_CONSTANT_MACROS


    ffmpeg Common.h error C3861: “UINT64_C”: 找不到标识符

    解决方法:在 common.h 中添加如下代码:

    #ifndef INT64_C
    #define INT64_C(c) (c ## LL)
    #define UINT64_C(c) (c ## ULL)
    #endif
    
    #ifdef __cplusplus
    #define __STDC_CONSTANT_MACROS
    #ifdef _STDINT_H
    #undef _STDINT_H
    #endif
    # include <stdint.h>
    #endif
    

    顺便解决了fatal error C1189: #error : missing -D__STDC_FORMAT_MACROS这个错误。


    ERROR: WriteN, RTMP send error 10054 (39 bytes)

    时间戳过大会导致该错误。原先错误将时间戳单位弄错了,时间戳过大,大了 1000 倍导致的。


    VS出现 fatal error C1083: 无法打开包括文件: “sys/socket.h”: No such file ....

    因为 sys/socket.h 是 Linux 系统下的库文件,所以在 windows 上无法打开,用#include <winsock.h>替换即可。


  • 相关阅读:
    三级菜单的实现方式
    简单登录接口实践
    C++中的set和java的hashset有何区别?
    css 利用文档结构给列表添加样式
    谈谈我对JS中this的理解
    谈谈我对JS原型的理解
    使用node.js,实现简单的JS文件合并小工具
    谈谈我对JS闭包的理解
    谈谈我对JS作用域的理解
    模拟实现 百度翻译 右下方的可折叠的分享按钮列表
  • 原文地址:https://www.cnblogs.com/linuxAndMcu/p/12365978.html
Copyright © 2020-2023  润新知