gpt4 book ai didi

qt - 如何在 VS2012 下静态构建 Qt 4.8/5.2,使用静态 MSVC 运行时,支持 Windows XP?

转载 作者:行者123 更新时间:2023-12-04 22:46:50 24 4
gpt4 key购买 nike

我想在 VS2012 下制作 Qt 4.8/5.2 的完全静态构建 - 包括静态运行时库,并针对 Windows XP 系统。这不是 Qt 开箱即用的支持,因为即使是 Qt 的静态构建也使用动态链接的 MSVC 运行时。

这是一个规范的问题,它提供了成功构建满足这些要求的 Qt 所需的知识。

最佳答案

Qt 5.2
假设环境已准备好进行 XP 定位,以及相关的 XP 定位 qt5xp.patch和错误修复 qt5fixes.patch可用 - 均来自 my other answer ,我们必须做到以下几点:

  • 创建一个单独的 win32-msvc2012-staticwin32-msvc2012-static-xp通过从 qtbase/mkspecs/win32-msvc2012 复制 qmake 规范和 qtbase/mkspecs/win32-msvc2012-xp , 分别。
  • 修改 qmake 规范。
  • 教 configure 和 qmake makefile 了解新的 qmake 规范。
  • configure.exe 的强制 bootstrap 通过创建一个空 .gitignore文件在 qtbase .
  • 如果您使用 -prefix 配置 Qt以便安装和构建目录是分开的,您必须应用补丁 QTBUG-32519 - 至少在那个错误得到修复之前。

  • 以下批处理文件完成了完整的工作。目前,静态 Qt 构建禁用 webkit 构建。
    :: Assume that we're in an equivalent of C:\Qt prefix
    @set PREFIX=%~dp0
    :: Qt sources
    @set QT=%PREFIX%..\5.2.1-src
    :: Patch file(s)
    @set SRC=%PREFIX%
    @set SPEC=win32-msvc2012
    @if not exist "%QT%\qt.pro" ( echo Qt source folder expected in %QT%>&2 & exit /b 1 )
    ::
    @patch --forward --directory=%QT% -p0 --global-reject-file=%SRC%\qt5fixes.rej --input=%SRC%\qt5fixes.patch
    ::
    @echo > %QT%\qtbase\.gitignore
    @mkdir %QT%\qtbase\mkspecs\%SPEC%-xp
    @copy %QT%\qtbase\mkspecs\%SPEC%\qplatformdefs.h %QT%\qtbase\mkspecs\%SPEC%-xp
    @copy %QT%\qtbase\mkspecs\%SPEC%\qmake.conf %QT%\qtbase\mkspecs\%SPEC%-xp
    @patch --forward --directory=%QT% -p0 --global-reject-file=%SRC%\qt5xp.rej --input=%SRC%\qt5xp.patch
    ::
    @mkdir %QT%\qtbase\mkspecs\%SPEC%-static
    @copy %QT%\qtbase\mkspecs\%SPEC%\qplatformdefs.h %QT%\qtbase\mkspecs\%SPEC%-static
    @copy %QT%\qtbase\mkspecs\%SPEC%\qmake.conf %QT%\qtbase\mkspecs\%SPEC%-static
    @mkdir %QT%\qtbase\mkspecs\%SPEC%-static-xp
    @copy %QT%\qtbase\mkspecs\%SPEC%-xp\qplatformdefs.h %QT%\qtbase\mkspecs\%SPEC%-static-xp
    @copy %QT%\qtbase\mkspecs\%SPEC%-xp\qmake.conf %QT%\qtbase\mkspecs\%SPEC%-static-xp
    @patch --forward --directory=%QT% -p0 --global-reject-file=%SRC%\qt5static.rej --input=%SRC%\qt5static.patch
    撤消 对 Qt 源代码的更改,运行以下命令,变量设置如上:
    @patch --reverse --directory=%QT% -p0 --global-reject-file=%SRC%\qt5static-unfix.rej --input=%SRC%\qt5static.patch
    @del %QT%\qtbase\mkspecs\%SPEC%-static\qplatformdefs.h
    @del %QT%\qtbase\mkspecs\%SPEC%-static\qmake.conf
    @rmdir %QT%\qtbase\mkspecs\%SPEC%-static
    @del %QT%\qtbase\mkspecs\%SPEC%-static-xp\qplatformdefs.h
    @del %QT%\qtbase\mkspecs\%SPEC%-static-xp\qmake.conf
    @rmdir %QT%\qtbase\mkspecs\%SPEC%-static-xp
    ::
    @patch --reverse --directory=%QT% -p0 --global-reject-file=%SRC%\qt5xp-unfix.rej --input=%SRC%\qt5xp.patch
    @del %QT%\qtbase\mkspecs\%SPEC%-xp\qplatformdefs.h
    @del %QT%\qtbase\mkspecs\%SPEC%-xp\qmake.conf
    @rmdir %QT%\qtbase\mkspecs\%SPEC%-xp
    @del %QT%\qtbase\.gitignore
    ::
    @patch --reverse --directory=%QT% -p0 --global-reject-file=%SRC%\qt5fixes-unfix.rej --input=%SRC%\qt5fixes.patch
    然后通过执行构建
    configure -static -platform win32-msvc2012-static-xp (or win32-msvc2012-static)
    jom (or nmake)
    jom install (if doing the build separate from the installation directory)
    # qt5static.patch
    # Static MSVC Runtime Support for Qt 5.2
    #
    # Build qmake with XP targeting.
    --- qtbase/qmake/Makefile.win32 2014-02-20 12:28:23.316380600 -0500
    +++ qtbase/qmake/Makefile.win32 2014-02-20 12:29:07.396008900 -0500
    @@ -42,7 +42,7 @@
    -DQT_NO_TEXTCODEC -DQT_NO_UNICODETABLES -DQT_NO_COMPONENT -DQT_NO_COMPRESS \
    -DQT_NO_THREAD -DQT_NO_QOBJECT -DQT_NO_GEOM_VARIANT -DQT_NO_DATASTREAM \
    -DUNICODE -DQT_CRYPTOGRAPHICHASH_ONLY_SHA1 -DQT_JSON_READONLY
    -!if "$(QMAKESPEC)" == "win32-msvc2012-xp"
    +!if "$(QMAKESPEC)" == "win32-msvc2012-xp" || "$(QMAKESPEC)" == "win32-msvc2012-static-xp"
    CFLAGS_BARE = $(CFLAGS_BARE) -D_USING_V110_SDK71_
    !endif
    CFLAGS = -Yuqmake_pch.h -FIqmake_pch.h -Fpqmake_pch.pch $(CFLAGS_BARE) $(CFLAGS) $(EXTRA_CPPFLAGS)
    # Add support for static qmake specs.
    --- qtbase/qmake/Makefile.win32 2014-02-01 22:37:30.000000000 -0500
    +++ qtbase/qmake/Makefile.win32 2014-02-17 16:21:09.329949100 -0500
    @@ -1,4 +1,4 @@
    -!IF "$(QMAKESPEC)" == "win32-msvc" || "$(QMAKESPEC)" == "win32-msvc.net" || "$(QMAKESPEC)" == "win32-msvc2002" || "$(QMAKESPEC)" == "win32-msvc2003" || "$(QMAKESPEC)" == "win32-msvc2005" || "$(QMAKESPEC)" == "win32-msvc2008" || "$(QMAKESPEC)" == "win32-msvc2010" || "$(QMAKESPEC)" == "win32-msvc2012" || "$(QMAKESPEC)" == "win32-msvc2012-xp" || "$(QMAKESPEC)" == "win32-msvc2013" || "$(QMAKESPEC)" == "win32-icc"
    +!IF "$(QMAKESPEC)" == "win32-msvc" || "$(QMAKESPEC)" == "win32-msvc.net" || "$(QMAKESPEC)" == "win32-msvc2002" || "$(QMAKESPEC)" == "win32-msvc2003" || "$(QMAKESPEC)" == "win32-msvc2005" || "$(QMAKESPEC)" == "win32-msvc2008" || "$(QMAKESPEC)" == "win32-msvc2010" || "$(QMAKESPEC)" == "win32-msvc2012" || "$(QMAKESPEC)" == "win32-msvc2012-static" || "$(QMAKESPEC)" == "win32-msvc2012-static-xp" || "$(QMAKESPEC)" == "win32-msvc2012-xp" || "$(QMAKESPEC)" == "win32-msvc2013" || "$(QMAKESPEC)" == "win32-icc"

    !if "$(SOURCE_PATH)" == ""
    SOURCE_PATH = ..

    # Set static runtime.
    --- qtbase/mkspecs/win32-msvc2012-static/qmake.conf 2014-02-17 23:01:29.965440300 -0500
    +++ qtbase/mkspecs/win32-msvc2012-static/qmake.conf 2014-02-17 23:05:51.630568400 -0500
    @@ -24,9 +24,9 @@
    QMAKE_CFLAGS = -nologo -Zm200 -Zc:wchar_t
    QMAKE_CFLAGS_WARN_ON = -W3
    QMAKE_CFLAGS_WARN_OFF = -W0
    -QMAKE_CFLAGS_RELEASE = -O2 -MD
    -QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += -O2 -MD -Zi
    -QMAKE_CFLAGS_DEBUG = -Zi -MDd
    +QMAKE_CFLAGS_RELEASE = -O2 -MT
    +QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += -O2 -MT -Zi -d2Zi+
    +QMAKE_CFLAGS_DEBUG = -Zi -MTd -d2Zi+
    QMAKE_CFLAGS_YACC =
    QMAKE_CFLAGS_LTCG = -GL
    QMAKE_CFLAGS_MP = -MP
    # Set static runtime.
    --- qtbase/mkspecs/win32-msvc2012-static-xp/qmake.conf 2014-02-17 23:01:29.965440300 -0500
    +++ qtbase/mkspecs/win32-msvc2012-static-xp/qmake.conf 2014-02-17 23:05:51.630568400 -0500
    @@ -24,9 +24,9 @@
    QMAKE_CFLAGS = -nologo -Zm200 -Zc:wchar_t
    QMAKE_CFLAGS_WARN_ON = -W3
    QMAKE_CFLAGS_WARN_OFF = -W0
    -QMAKE_CFLAGS_RELEASE = -O2 -MD
    -QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += -O2 -MD -Zi
    -QMAKE_CFLAGS_DEBUG = -Zi -MDd
    +QMAKE_CFLAGS_RELEASE = -O2 -MT
    +QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += -O2 -MT -Zi -d2Zi+
    +QMAKE_CFLAGS_DEBUG = -Zi -MTd -d2Zi+
    QMAKE_CFLAGS_YACC =
    QMAKE_CFLAGS_LTCG = -GL
    QMAKE_CFLAGS_MP = -MP

    关于qt - 如何在 VS2012 下静态构建 Qt 4.8/5.2,使用静态 MSVC 运行时,支持 Windows XP?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21862989/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com