我将尽我所能将故事简短化。 我按照本指南静态编译了QT 5.11.2,以便能够在Windows下编译单个可执行文件: https://retifrav.github.io/blog/2018/02/17/build-qt-statically/
经过多次试验,编译,这样我能够以“释放”模式获得大约15MB的.exe
。
我在"QTPLUGIN.imageformats = -"
项目中使用选项.pro
使用不同的MinGW版本来编译它,以避免出现-ltiff
错误。
这很奇怪,因为我的应用程序没有图像处理操作...
我的应用程序是一个简单的基本按钮(没有事件关联)。
我现在面临的问题是,当鼠标移到按钮上并且它应该从灰色变成浅蓝色时,Windows方向盘会旋转一秒钟,然后应用程序因Segmentation fault
而崩溃。
使用动态编译效果很好,并且不会崩溃。
经过多次尝试,我发现至少另一个QT对象以RadioBox
相同的方式崩溃。鼠标悬停事件可以正确处理CheckBox
和Tool Button
。
我试图更改从工作对象复制的崩溃对象属性,但仍然崩溃!
我很绝望!经过静态编译的噩梦之后,我发现了这个问题,到目前为止,没有谷歌搜索对我有帮助。
经过测试的编译器是:
MinGW 4.9.2 g++
MinGW 5.3 g++
MinGW 7.3 g++
我还试图删除调试器,以防万一。
有帮助吗?
由于已知的问题,我正从Rad Studio移至QT,而不是解决方案。
答案 0 :(得分:0)
我将其发布为答案,因为它太长了,无法发表评论...
我从头开始安装了qt。我从qt git hub回购开始。完成后,我将其作为套件添加到我的qtcreator中,并重新构建了一些我曾经使用按钮进行过的GUI项目。然后,我拿了exe的文件(它们大约500mb,因为我使用了调试配置)并在从未见过Qt(旅行笔记本电脑)的PC上运行它们,并且我测试的两个程序在按下按钮时都运行良好,并且没有崩溃。>
因此,这是我使用的说明列表(适用于Windows 10),您也许可以从头开始尝试一下,看看是否有帮助:
无特殊顺序:
git clone https://github.com/qt/qt5.git qt5
git checkout 5.12.1
(特定的内部版本,而不是最新的5.12)git submodule update --init --recursive
git submodule foreach --recursive "git clean -dfx" && git clean -dfx
(确保仓库是干净的)注意::在mingw文件夹中应该有一个mingw-xx.bat文件来为gcc打开cmd提示符环境。对所有cmd提示运行此命令以执行以下操作。
注意::请确保您编辑路径,以便草莓perl ... / bin位于任何其他perl之前 因此,DOS环境设置应如下所示:
set PATH=D:\install\StrawberryPerl\perl\bin;%PATH%
set PATH=D:\install\mingw-w64\i686-7.3.0-posix-dwarf\mingw32\bin;%PATH%
set PATH=D:\install\Qt\qt5\qtbase\bin;%PATH%
set PATH=D:\install\Qt\qt5\gnuwin32\bin;%PATH%
我的qt5 git存储库位于D:\install\Qt\qt5
处。
../qt5/
仓库(例如,../qt5-static-build/
)相同的级别上创建文件夹,并将其CD放入其中,然后运行:- ..\qt5\configure -debug -opensource -static -static-runtime -skip webengine -nomake examples -nomake tests -nomake tools -accessibility -no-sql-sqlite -no-opengl -platform win32-g++ -qt-zlib -qt-libpng -qt-libjpeg -confirm-license -prefix "C:\install\Qt\5.12.1-static"
../qt5/
仓库(例如,../qt5-build/
)相同的级别上创建文件夹,并将其CD放入其中,然后运行:..\qt5\configure -debug -opensource -skip webengine -nomake examples -nomake tests -nomake tools -accessibility -no-sql-sqlite -no-opengl -platform win32-g++ -qt-zlib -qt-libpng -qt-libjpeg -confirm-license -prefix "C:\install\Qt\5.12.1-sharedlib"
您配置qt的两种方法(静态或非静态)都相同,基本上可以运行:
mingw32-make -j8
mingw32-make install -j8
注意:您可以使用所需的任何并行号码(-j<num-jobs>
)。当然,每个阶段都需要一段时间,具体取决于您的CPU。
完成后,在配置行中设置的安装路径(例如C:\install\Qt\5.12.1-static
)将包含您的qt安装。然后,您可以将其作为新的qt版本添加到qtcreator中。(如果您使用的是它的构建方式)。
如果要发布版本等,则可能需要以下配置(但我尚未对此进行测试):
.. \ qt5 \ configure具有以下选项:
-release -optimize-size -opengl desktop -no-pch -platform win32-g++ -opensource -static -static-runtime -skip webengine -nomake examples -nomake tests -nomake tools -accessibility -no-sql-sqlite -no-opengl -platform win32-g++ -qt-zlib -qt-libpng -qt-libjpeg -confirm-license -prefix "C:\install\Qt\5.12.1-static"
我添加的位置:
-release
-代替调试-optimize-size
-缩小尺寸-opengl desktop
-如果需要则使用opengl -no-pch
-没有预编译的标头,不确定您是否需要此标头,但是... -platform win32-g++
-同样,如果您遇到构建问题,但可能不需要它,这可能会有所帮助。