gpt4 book ai didi

windows - 如何在Windows下将Qt5构建为静态库

转载 作者:行者123 更新时间:2023-12-03 11:06:46 27 4
gpt4 key购买 nike

要将Qt应用程序作为简单的.exe文件分发给Windows用户,需要将其与静态版本的Qt库静态链接。假设我们在开放许可证下分发许可证,以便允许Qt的静态链接。因此,我们只需要Qt5Core,Qt5Gui,Qt5Widgets的静态库二进制文件即可。如何获得它们?

Qt5的二进制发行版仅带有动态库。它也包含一些.lib文件-但是请注意,这些不是静态库,而是一些辅助文件。它们的大小可以与真正的静态库区分开:真正的静态库要大得多(对于Qt5组件,很多MB)。因此,我们需要自己静态编译Qt5。事实证明这非常困难。

官方指令(http://doc.qt.io/qt-5/windows-building.html)几乎没有用:太短了,甚至无法传达任务难度。当前缺少如何将Qt5编译为静态库的精确,最新的分步指南。我们应该在这里。

最佳答案

简短的答案:不要在此上浪费时间。 动态链接,并让安装程序分发您的应用程序。这是Qt5和CMake严重支持的唯一模式。没有他们的支持和反对他们的建议的工作几乎是没有希望的。设置安装程序要容易得多(尽管也没有什么乐趣-我们目前使用https://hk.saowen.com/a/d1cf90fcfea6d511629fd5a6c8113808721a7f19656677e8a5fab370a8d35cd4中的黑魔法)。

长的答案(但还不完整),以防您比我聪明:

以下步骤使我看似接近解决方案。我成功构建了静态库,但未能链接我的应用程序:在收到数百个由于无法解析的外部符号引起的LNK2001和LNK2019错误时,我不得不放弃。

因此,这里逐步介绍了2018年10月在Windows10虚拟桌面上对我有用的内容。对于每个安装步骤,都会进行检查。如果检查失败,请先解决问题,然后再继续进行。

首先,安装稍后需要的一些工具:

  • Perl ,对于zlib和openssl配置是必需的:
  • 如果“perl -v”有效,请跳过。
  • https://www.activestate.com/activeperl获取安装程序
  • 运行安装程序->将安装到C:\Perl64。
  • 检查:重新启动终端,然后尝试“perl -v”。
  • 一个可以处理Unix行尾的编辑器。记事本不会。安装 vim emacs 或其他任何方法。
  • Chocolatey 软件包管理器,需要安装flex和bison:
  • 运行管理 shell (圈子菜单>搜索“命令”>右键单击“命令提示符”>以管理员身份运行)
  • https://chocolatey.org/install#install-with-cmdexe复制下载命令
  • 将命令粘贴到admin shell,并观看安装
  • 检查:在终端中,尝试命令“choco”
  • qtbase编译所需的
  • flex 野牛:
  • 获得正确版本的flex并不明显。从gnuwin32.sourceforge.net,我得到了一个过时的flex,它错过了Qt编译期间所需的命令行参数。从源代码编译flex会带来更多依赖关系。我找到的最简单的解决方案是使用Chocolatey软件包管理器。
  • 在管理员 shell 程序中,运行:“choco install winflexbison3”。这将创建一个目录 X ,其中包含二进制文件win_flex.exe和win_bison.exe以及一个支持的“数据”文件夹。找出 X 的位置。在我的情况下, X = C:\ProgramData\chocolatey\lib\winflexbison3\tools
  • 检查:cd X ,然后运行“win_flex --version”,“win_bison --version”。
  • 在Qt编译期间,将需要使用这些工具的标准名称“flex”和“bison”。因此,我们需要符号链接(symbolic link)flex-> win_flex,野牛-> win_bison。
  • mlink X \flex.exe X \win_flex.exe
  • mlink X \bison.exe X \win_bison.exe
  • 注意:mklink需要绝对路径才能可靠地工作
  • 注意:符号链接(symbolic link)不得转到其他目录,以免野牛无法找到“数据”文件夹
  • X 添加到%PATH%
  • 检查:在任何 shell 程序中,尝试“flex --version”和“bison --version”

  • 到目前为止,对于工具。现在,我们需要两个必须静态链接到Qt的库(从 https://stackoverflow.com/a/41815812/1017348中学到的魔术):
  • 构建静态 zlib :
  • 下载https://zlib.net/zlib1211.zip
  • 解压到C:\Development\zlib-1.2.11
  • 使用可以处理Unix EOL的编辑器编辑win32\Makefile.msc文件:
  • 查找以CFLAGS开头的行
  • 用-GL -MT -Zc:wchar_t-
  • 替换-MD
  • 查找以LDFLAGS开头的行
  • 将-debug替换为-opt:icf -dynamicbase -nxcompat -ltcg/nodefaultlib:msvcrt
  • 使用以下命令构建zlib(应少于一分钟):
  • nmake -f win32/Makefile.msc AS = ml64 LOC =“-DASMV -DASMINF -DNDEBUG -I。” OBJA =“inffasx64.obj gvmat64.obj inffas8664.obj”
  • 检查:结果,源目录必须包含zlib.lib(856kB)等。
  • 构建静态 openssl 库:
  • 下载https://www.openssl.org/source/openssl-1.1.1.tar.gz
  • 解压到C:\Development\openssl-1.1.1
  • 从zlib复制文件:cd zlib-1.2.11; xcopy zconf.h ..\openssl-1.1.1\;与zlib.h相同zlib.lib zlib.pdb
  • cd ..\openssl-1.1.1
  • perl配置VC-WIN64A no-asm no-shared zlib no-zlib-dynamic线程--prefix = C:\opt\local_x64
  • 注意:我添加了“no-asm”以避免安装NASM(Netwide汇编程序)
  • 注意:我更改了前缀,因为只有管理员可以安装到C:\Windows
  • 编辑文件``makefile'':
  • 查找以以下内容开头的行:CFLAG
  • 附加:/Zc:wchar_t-/GL/Zi
  • 查找以以下开头的行:LDFLAGS
  • 用/incremental替换/debug:no/opt:icf/dynamicbase/nxcompat/ltcg/nodefaultlib:msvcrt
  • 查找以以下内容开头的行:CNF_EX_LIBS
  • 用zlib.lib替换ZLIB1
  • 构建:“nmake”
  • 检查:目录必须包含openssl.lib(大小?)

  • 现在,我们准备使用Visual Studio C++编译器的命令行版本从源代码构建 qtbase :
  • 下载(最新Qt的更新位置):https://download.qt.io/archive/qt/5.11/5.11.2/submodules/qtbase-everywhere-src-5.11.2.zip
  • 开箱需要大约20'
  • 将源目录移动到本地磁盘(C:\Development)
  • 要使用Visual Studio,请使用经过特殊配置的终端。使用任务栏>圆形>搜索以启动“VS 2017的x64 native 工具命令提示符”
  • cd qtbase ...
  • 检查:配置--help
  • configure -platform win32-msvc2017 -opensource -confirm-license -release -static -openssl链接的no-dbus -no-libpng -no-libjpeg -nomake示例-nomake测试-prefix C:\opt\local_x64 -IC:\开发\openssl-1.1.1\include -LC:\Development\openssl-1.1.1 -D OPENSSL_LIBS = C:\Development\openssl-1.1.1\libssl.lib
  • 在调试“configure”时,可能有必要删除config.cache。
  • 选项-我不使用相对路径
  • 如果我们要在64位应用程序中使用Qt,则标签“win32”可能看起来不正确,但建议不要担心:building Qt under Windows: really with "-platform win32-msvc2017"?
  • 我不知道如何摆脱Sql:https://bugreports.qt.io/browse/QTBUG-71253
  • 可选代码需要
  • libpng和libjpeg。它们在src/3rdparty中提供,这往往会引起与系统提供的库版本的冲突。因此,我们构建时没有PNG和JPG支持。
  • nmake
  • 检查:静态库(大.lib和小.prl)位于目录lib/中
  • 54.7 MB的Qt5Core.lib
  • 23.4 MB Qt5Widgets.lib
  • 18.2 MB Qt5Gui.lib
  • 07.4 MB Qt5Network.lib
  • ...

  • 就是这样,我们有静态的Qt库。只是,如上所述,当我尝试将应用程序与这些库链接时,这无济于事。

    关于windows - 如何在Windows下将Qt5构建为静态库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52892660/

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