Skip to content

Latest commit

 

History

History
345 lines (265 loc) · 17.5 KB

WINDOWS_MSVC_MinGW & LINUX_GCC & MACOS_CLANG 所遇到奇葩问题集锦.md

File metadata and controls

345 lines (265 loc) · 17.5 KB
title date updated
WINDOWS_MSVC_MinGW & LINUX_GCC & MACOS_CLANG 所遇到奇葩问题集锦
2023-05-01 05:22:28 -0700
2023-06-29 09:34:28 -0700

目录

[toc]

最开始,都是在 Linux 上开发:UOS/Deepin, Ubuntu,ArchLinux;后来喜欢 MacOS 系统,间歇性偶尔续续折腾;当前,主要以 Windows 上折腾为主,天天重度使用。主要记录这几年中,开发过程中的问题,和一些办公软件、开发工具相关的问题;疑难杂症和经验之谈,涉及面:

  1. WINDOWS & MSVC & MinGW
  2. LINUX & GCC
  3. MACOS & CLANG
  4. 办公 & 居家 & 生产力 的软件
  5. 后续:人生 & 职场 & 感悟 & 哲学 (以后有时间写)

PUBLIC 所遇到奇葩问题集锦

QtCreator

  1. 使用 Qt Creator 提升控件自定义控件时,操作如下, MSVC 和 WinGW 都可编译通过,亲测出来的方案;通常报错如下

    通常报错 ”ui_mainui.h:22:10: fatal error: chatinputedit.h: No such file or directory
     #include "chatinputedit.h"
              ^~~~~~~~~~~~~~~~~“
    [解] 不添加 Global,且 CMake 添加 include_directories 说明此提升的头文件路径

    1. `promoted to` 提升自定控件操作如图,然后在 CMakeLists.txt  中添加包含此头文件的路径,添加 `include_directories(${PROJECT_SOURCE_DIR}/widgets)`,用于修复 Qt Design 使用提升自定义控件后, MinGW 找不到而编译失败。
          
       - 若是要降低会原本的 Q控件,使用 `Demote to`
       - 若仅仅只用 MSVC 编译,上图片中的 `Promoted class name:` 添加自定义类名后,在 `Header file:` 后面自动生成文件后,补上其相对路径的部分,然后 不用写 include_directories 这一行,也可以直接编译通过
      
  2. Mac 13 上用 Clang64 编译 Qt+CMake 报错::-1: error: ninja: build stopped: subcommand failed.

[解] 1.可能得 kit 没有设置好 2. CMake 没有安装好 3. CMakeList.txt 里面的语法存在错误,屏蔽排查(通常是)

  1. xx

WINDOWS 所遇到奇葩问题集锦

NT/MSVC 编译开发问题

  1. 如何设置安装 Visual Studio Install 使用英文语言运行?

    [解] 程序运行后添加 --locale en-US 即可

  2. QStringchar * 莫名其妙会失败?!!!

    [解] 转换分为两步来完成一定没有问题,但是一步直接到, MSVC 下会偶尔有问题

    https://github.com/feiyangqingyun/qtkaifajingyan 的 185 条已总结,同遇到和排查出来,真滴是血的教训,操操操

      QString text = "xxxxx";
      //下面这样转换很可能会有问题
      char *data = text.toUtf8().data();
      //分两步转换肯定不会有问题
      QByteArray buffer = text.toUtf8();
      char *data = buffer.data();
      const char *data = buffer.constData();
      
  3. 微软 SDK 导致的项目编译失败哦~ [解]

  4. Win10的20H2使用VS2019,拖曳窗口会崩溃!!! [解]

  5. VS2019调试Qt5时QString显示为内存地址而非字符串!!! [解]

  6. 一个微软自带的 Notepad 所导致的问题,回车符(CR)和换行符(LF)。 [解]

  7. Visual Studio 断点调试之箭头偏移进错函数,捉虫记 [解]

  8. Qt Creator(Qt 15.2) 使用 MinGW 则会编译成功,改用 MSVC 2022 却编译失败!!!

    [解] 某些中文注释会导致编译失败 (操!!!)

    MSVC 的 .h.cpp 都采用 UTF8-BOM 格式,

    
      
  9. Qt Creator(Qt 15.2) 使用 MinGW 终端的中文不会乱码,改用 MSVC 2022 却中文乱码

    [解] 某些中文注释会导致编译失败 (操!!!),CMake 中设置 utf-8

    MSVC 的 .h.cpp 都采用 UTF8-BOM 格式。同时可参考 8 条

      # 采用 MSVC 终端上的中文不乱码
    if (MSVC)
        set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /utf-8")
        add_compile_options(/source-charset:utf-8 /execution-charset:utf-8) // 根据实际可注释
    endif()
      
  10. Qt 5.15 获取音频的输入输出,使用 MinGW 则会编译仅仅会获取一份,改用 MSVC 2022 却编译却会获得信息重复

    [解] 详细参数确实有不同,如何去重的方法还在寻找中。 已解决,手动写了一个算法进行去重。

    MSVC 和 MinGW 的又一个不相同,哔了狗

      【问题源码和打印显示】
        // 获取音频输入设备列表
        QList inputDevices = QAudioDeviceInfo::availableDevices(QAudio::AudioInput);
        qDebug() << "音频输入设备列表:";
        for (const QAudioDeviceInfo& deviceInfo : inputDevices) {
            qDebug() << "设备名称:" << deviceInfo.deviceName();
    		qDebug() << "支持的采样率:" << deviceInfo.supportedSampleRates();
    		qDebug() << "支持的声道数:" << deviceInfo.supportedChannelCounts();
    		qDebug() << "支持的采样大小:" << deviceInfo.supportedSampleSizes();
    		qDebug() << "支持的编码格式:" << deviceInfo.supportedCodecs();
    		qDebug() << "-------------------------------------";
        }
        // 获取音频输出设备列表
        QList outputDevices = QAudioDeviceInfo::availableDevices(QAudio::AudioOutput);
        qDebug() << "音频输出设备列表:";
        for (const QAudioDeviceInfo& deviceInfo : outputDevices) {
            qDebug() << "设备名称:" << deviceInfo.deviceName();
    		qDebug() << "支持的采样率:" << deviceInfo.supportedSampleRates();
    		qDebug() << "支持的声道数:" << deviceInfo.supportedChannelCounts();
    		qDebug() << "支持的采样大小:" << deviceInfo.supportedSampleSizes();
    		qDebug() << "支持的编码格式:" << deviceInfo.supportedCodecs();
    		qDebug() << "-------------------------------------";
        }
    🤣🤣🤣🤣🤣🤣🤣🤣🤣🤣🤣🤣
    ***********************************MSVC 编译器输出***********************************
    [debug]  m_microphoneDevices设备名称: "麦克风阵列 (适用于数字麦克风的英特尔? 智音技术)"
    [debug] 支持的采样率: (8000, 11025, 16000, 22050, 32000, 44100, 48000, 88200, 96000, 192000)
    [debug] 支持的声道数: (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18)
    [debug] 支持的采样大小: (8, 16, 24, 32, 48, 64)
    [debug] 支持的编码格式: ("audio/pcm")
    [debug] -------------------------------------
    [debug]  m_microphoneDevices设备名称: "麦克风阵列 (适用于数字麦克风的英特尔? 智音技术)"
    [debug] 支持的采样率: ()
    [debug] 支持的声道数: (1, 2)
    [debug] 支持的采样大小: ()
    [debug] 支持的编码格式: ("audio/pcm")
    [debug] -------------------------------------
    [debug] m_speakerDevices 设备名称: "扬声器 (Realtek(R) Audio)"
    [debug] 支持的采样率: (8000, 11025, 16000, 22050, 32000, 44100, 48000, 88200, 96000, 192000)
    [debug] 支持的声道数: (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18)
    [debug] 支持的采样大小: (8, 16, 24, 32, 48, 64)
    [debug] 支持的编码格式: ("audio/pcm")
    [debug] -------------------------------------
    [debug] m_speakerDevices 设备名称: "P27q-30 (NVIDIA High Definition Audio)"
    [debug] 支持的采样率: (8000, 11025, 16000, 22050, 32000, 44100, 48000, 88200, 96000, 192000)
    [debug] 支持的声道数: (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18)
    [debug] 支持的采样大小: (8, 16, 24, 32, 48, 64)
    [debug] 支持的编码格式: ("audio/pcm")
    [debug] -------------------------------------
    [debug] m_speakerDevices 设备名称: "P27q-30 (NVIDIA High Definition Audio)"
    [debug] 支持的采样率: (48000)
    [debug] 支持的声道数: (2)
    [debug] 支持的采样大小: (8, 16, 24, 32, 64)
    [debug] 支持的编码格式: ("audio/pcm")
    [debug] -------------------------------------
    [debug] m_speakerDevices 设备名称: "扬声器 (Realtek(R) Audio)"
    [debug] 支持的采样率: (48000)
    [debug] 支持的声道数: (2)
    [debug] 支持的采样大小: (8, 16, 24, 32, 64)
    [debug] 支持的编码格式: ("audio/pcm")
    [debug] -------------------------------------
    🤣🤣🤣🤣🤣🤣🤣🤣🤣🤣🤣🤣
    ***********************************MinGW 编译器输出***********************************
    [debug]  m_microphoneDevices设备名称: "麦克风阵列 (适用于数字麦克风的英特尔? 智音技术)"
    [debug] 支持的采样率: (8000, 11025, 16000, 22050, 32000, 44100, 48000, 88200, 96000, 192000)
    [debug] 支持的声道数: (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18)
    [debug] 支持的采样大小: (8, 16, 24, 32, 48, 64)
    [debug] 支持的编码格式: ("audio/pcm")
    [debug] -------------------------------------
    [debug] m_speakerDevices 设备名称: "扬声器 (Realtek(R) Audio)"
    [debug] 支持的采样率: (8000, 11025, 16000, 22050, 32000, 44100, 48000, 88200, 96000, 192000)
    [debug] 支持的声道数: (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18)
    [debug] 支持的采样大小: (8, 16, 24, 32, 48, 64)
    [debug] 支持的编码格式: ("audio/pcm")
    [debug] -------------------------------------
    [debug] m_speakerDevices 设备名称: "P27q-30 (NVIDIA High Definition Audio)"
    [debug] 支持的采样率: (8000, 11025, 16000, 22050, 32000, 44100, 48000, 88200, 96000, 192000)
    [debug] 支持的声道数: (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18)
    [debug] 支持的采样大小: (8, 16, 24, 32, 48, 64)
    [debug] 支持的编码格式: ("audio/pcm")
    [debug] -------------------------------------
    🤣🤣🤣🤣🤣🤣🤣🤣🤣🤣🤣🤣
    【解决方案】还在找中,或者看如何去重
    
  11. xxx


WINDOWS 问题

  1. Teams 始终无法登录,提示如图:我们无法连接到你。 HTTP 404 login.micsoftonline.com

    [解] Teams 安装应用程序-属性-运行兼容性疑难解答

    [含详细报错图片 和 解决图]

    解决方案:
      
  2. Office 365 企业版,无法登录账号

    [解] 关掉系统代理(代理直连也不行,必须要关掉),ref1 评论

  3. 重装系统后,自动更新后,托盘的喇叭🔈图标错误,且无法打开

    [解] 运行命令如下,亲测可用

    参考 https://blog.csdn.net/Bigotry_1/article/details/121957884

     
    1.首先按下“win+R”打开运行的窗口,点击输入命令“cmd”,并以管理员身份进入
    2.然后在弹出来的窗口中点击输入“DISM.exe /Online /Cleanup-image /Scanhealth”,回车确定扫描映像是否完整
    3.然后完成后再检测映像,输入:DISM.exe /Online /Cleanup-image /Checkhealth。
    4.然后再修复映像,输入:DISM.exe /Online /Cleanup-image /Restorehealth。
    5.最后检查系统并修复:sfc /scannow。
    6.重启电脑,然后就完成了
      


LINUX & GCC 所遇到奇葩问题集锦

简 述: 当初记录一些使用和开发 Deepin/UOS V20 过程中的一些奇怪的 Bug、或者记录一些奇怪知识。

  1. Debug 编译运行成功、Releas编译成功、运行崩溃

    [解] 变量的值未初始化,在 Debug 模式会自动赋值,但是 Release 模式下会,不会自动赋初值;

    在写 `dde-dock` 的时候,遇到编译的网速插件在 Debug 模式下会编译成功、运行成功;在 Release 下也可以编译成功,但运行会崩溃。环境如下: 💻:  uos20 amd64 📎 Qt 5.11.3 📎 gcc/g++ 9.0 📎 gdb8.0
      **本次错误的三个原因:**
    - 重写了虚函数,但是里面没有写具体的内容
    - 函数有 bool 返回值,但是函数体内部没有写
    - 很多虚函数只搭建了框架,里面都是空着的,运行一会后突然崩溃
      
  2. UOS V20 控制中心编译成功、运行崩溃

    [解] 然后将 `main.cpp` 的下面此处此行修改为`new` 的形式后,成功运行了

    控制中心  `dde-control-center`  从  `gerrit` 上面新下载的源码, 切换到 `maintain/5.2` 分支,编译成功,运行失败,一定崩溃,界面不会显示出来;后来切换到 `uos` 分支也是一样的结果。
    报错如下:
    
    
    #### 分析
    - 重新在 gerrit 上拉取一份新的最新代码,旧的可能被未知污染了;同时再找一份电脑编译运行此项目,作为对比验证
    - 控制中心运行显示, 后面要加参数 `-s`
    - 怀疑可能 dtk 版本过低,`dtkcore、dtkgui、dtkwidget` 都升级到最新的版本,对应的 `-dev` 包也升级了一下;
    - 然后重启系统;
    - 重建构建生成依赖 `sudo apt build-dep dde-control-center`  或者  `dpkg-checkbuilddeps` ;
    - 删除 `.user` 临时文件;然后重来一轮 **重新 清理、构建、运行** 再次尝试;
    #### 解决一
    然后将 `main.cpp`  的下面此处此行修改为`new` 的形式后,成功运行了:
    ```cpp
    int main(int argc, char *argv[])
    {
        DApplication *app = DApplication::globalApplication(argc, argv);
    ...省略
    int main(int argc, char *argv[])
    {
        DApplication *app = new DApplication(argc, argv);
    ```
    #### 解决二
    依旧怀疑是 `DTK` 的问题,安装了符号调试包准备调试 `DTK` 时候;运行之后 `sudo apt install libdtkwidget5-dbgsym` 之后,发现不用修改**解决一** ,此 Bug 没有再次复现,也可以成功运行。
    #### 其它
    如何使用 gdb 带参数调试,fpc 有一篇 markdown 文档;systemd-coredump 是干啥用的,学习一下。
      
  3. 显示器外接而苹果 3.5mm 耳机,显示没有声音,不能听歌;以为是 dde-control-center 的 bug ,升级到最新版本;依旧无效

    [解] 显示器使用 `VGA` 连接机箱,没有音频输出,所以耳机没有显示,改为插入 机箱的耳机接口,即回复正常。 PS: 若用 `HTMI` 连接,是自带音频,直接外接显示器

    属于硬件的数据线不知,原报错图
    
      
  4. QtCreator 项目,过量的调试信息;发现控制台有很多调试信息刷屏,很烦。想屏蔽这个消息

    [解] 在 /etc/X11/Xsession.d/00deepin-dde-env 中注释掉 QT_LOGGING_RULES="*.debug=true" 即可,然后注销之后生效。可在 QtCreator 中,项目-Build & Run-Run-Run Environment 中,查看到该环境变量。

    若为 false 就是啥都不打印, 包括你自己的 qDebug()<< ;为 true 所有的 qtdebug 日志都会打印。

  5. xxx



MACOS & CLANG 所遇到奇葩问题集锦

  1. xxx

Further Information

另外发现几个甚是出彩的开发 Qt, CMake, Windows 相关的经验总结,可以多观摩和体会,很多问题,经过自己不懈的熬夜调试,发现都是前人已经遇到且总结出来的,去搜搜关键词,通常会有意外之喜;

人生苦短,疼爱自己,多陪家人。

若有质量较佳的集合,欢迎提 PR 补充