问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

Qt静态编译常见问题及解决方案

创作时间:
作者:
@小白创作中心

Qt静态编译常见问题及解决方案

引用
CSDN
10
来源
1.
https://blog.csdn.net/BJ4015/article/details/140711732
2.
https://cloud.baidu.com/article/3319045
3.
https://blog.csdn.net/wangz76/article/details/137089941
4.
https://wenku.csdn.net/answer/90c8578d7cbf4be3afd1a86804f594e3
5.
https://blog.csdn.net/m0_46144825/article/details/137748412
6.
https://blog.csdn.net/u012402739/article/details/128388365
7.
https://my.oschina.net/emacs_8812562/blog/17322212
8.
https://www.cnblogs.com/Koomee/p/18155579
9.
https://www.cnblogs.com/xy0797/p/18372635
10.
https://learn.microsoft.com/zh-cn/visualstudio/releases/2019/release-notes

在Qt开发中,静态编译是一个重要的技术环节,它允许开发者将所有依赖库打包到一个可执行文件中,从而在没有安装Qt运行时的系统上运行应用程序。然而,在进行静态编译时,开发者经常会遇到各种令人头疼的错误。本文将详细介绍Qt静态编译中常见的问题及其解决方案,帮助开发者顺利进行静态编译。

01

MSYS2环境下32位Qt源码编译错误

在使用MSYS2环境编译32位Qt源码并添加openssl支持时,可能会遇到以下错误:

_uuidof was not declared in this scope

这个错误通常出现在src/plugins/scenegraph/d3d12/qsgd3d12engine.cpp文件中。要解决这个问题,可以按照以下步骤操作:

  1. 打开src/plugins/scenegraph/d3d12/qsgd3d12engine.cpp文件
  2. 将所有_uuidof替换为__uuidof
  3. 打开src/plugins/scenegraph/d3d12/qsgd3d12engine_p_p.h文件
  4. 在文件开头添加#include <d3d12sdklayers.h>头文件
  5. static const int替换为static inline const int

例如,将以下代码:

static const int MAX_SWAP_CHAIN_BUFFER_COUNT = 4;
static const int MAX_FRAME_IN_FLIGHT_COUNT = 4;

修改为:

static inline const int MAX_SWAP_CHAIN_BUFFER_COUNT = 4;
static inline const int MAX_FRAME_IN_FLIGHT_COUNT = 4;
02

Qt Creator静态编译配置

在Qt Creator中进行静态编译的基本步骤如下:

  1. 打开Qt Creator并创建一个新项目或打开现有项目
  2. 在项目配置中,选择“Build & Run”选项卡
  3. 在“qmake”部分,修改“qmake”参数,添加-static标志以启用静态编译
  4. 在“Build steps”中,确保使用静态编译器进行编译
  5. 在“Deploy steps”(仅适用于跨平台部署)中,确保包含所有必要的静态库文件

此外,你还可以通过直接修改项目文件(如.pro文件)来启用静态编译。在项目文件中添加以下行:

CONFIG += static

这将告诉qmake生成静态链接的应用程序。

03

添加openssl支持

在编译Qt源码时,如果需要包含openssl支持,需要先编译openssl库,并将其路径添加到Qt的编译选项中。以下是静态编译Qt时添加openssl支持的步骤:

  1. 下载并编译openssl库。可以从openssl官网下载最新源码包,例如openssl-1.1.1i.tar.gz。解压缩后,进入目录,执行以下命令进行编译:

    ./config no-shared --prefix=/path/to/openssl
    make && make install
    
  2. 在配置Qt编译时,添加-openssl-linked选项,并指定openssl库的路径。例如:

    ./configure -confirm-license -opensource -platform win32-g++ -mp -release -static -openssl-linked -prefix /f/Qt/Static -qt-sqlite -qt-zlib -qt-libjpeg -qt-libpng -qt-freetype -opengl desktop -no-qml-debug -no-angle -nomake tests -nomake examples -skip qtwebengine -skip qtwebview -skip qt3d
    
04

使用MinGW 11.2编译Qt

使用MinGW 11.2编译Qt时,可能会遇到一些问题。以下是一些常见的解决方案:

  1. 解决struct _FILE_ID_INFO重复定义问题

    qtbase/src/corelib/io/qfilesystemengine_win.cpp文件的667行,将:

    #if defined(Q_CC_MINGW) && WINVER < 0x0602 //  Windows 8 onwards
    typedef struct _FILE_ID_INFO {
        ULONGLONG VolumeSerialNumber;
        FILE_ID_128 FileId;
    } FILE_ID_INFO, *PFILE_ID_INFO;
    #endif // if defined (Q_CC_MINGW) && WINVER < 0x0602
    

    修改为:

    #if defined(Q_CC_MINGW) && WINVER < 0x0602 && !(_WIN32_WINNT >= _WIN32_WINNT_WIN8) //  Windows 8 onwards
    typedef struct _FILE_ID_INFO {
        ULONGLONG VolumeSerialNumber;
        FILE_ID_128 FileId;
    } FILE_ID_INFO, *PFILE_ID_INFO;
    #endif // if defined (Q_CC_MINGW) && WINVER < 0x0602
    
  2. 解决fxc.exe找不到的问题

    使用系统搜索工具查找fxc.exe文件,并设置环境变量:

    set path=%path%;C:\Program Files (x86)\Windows Kits\10\bin\u0064
    
  3. 解决D3D12相关错误

    src/plugins/scenegraph/d3d12/qsgd3d12engine.cpp文件中,进行以下修改:

    diff --git a/src/plugins/scenegraph/d3d12/qsgd3d12engine.cpp b/src/plugins/scenegraph/d3d12/qsgd3d12engine.cpp
    index 75bde2c66b..3594878eca 100644
    --- a/src/plugins/scenegraph/d3d12/qsgd3d12engine.cpp
    +++ b/src/plugins/scenegraph/d3d12/qsgd3d12engine.cpp
    @@ -221,7 +221,7 @@ static void getHardwareAdapter(IDXGIFactory1 *factory, IDXGIAdapter1 **outAdapte
            if (SUCCEEDED(factory->EnumAdapters1(adapterIndex, &adapter))) {
                adapter->GetDesc1(&desc);
                const QString 
    

通过以上解决方案,开发者可以有效地解决Qt静态编译过程中遇到的常见问题。在实际开发中,如果遇到其他问题,建议仔细检查错误信息,分析问题原因,并根据具体情况进行相应的处理。同时,保持开发环境的整洁和配置的正确性也是避免问题的关键。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号