MSYS2/MinGW 中 Qt hello world 应用程序的简单静态构建中的运行时错误
Runtime errors in trivial static build of Qt hello world application in MSYS2/MinGW
我正在尝试使用 MSYS2/MinGW.
为 Windows 构建一个简单的 Qt 应用程序,如下所示
hello.cpp:
#include <QApplication>
#include <QWidget>
int main(int argc, char **argv)
{
QApplication app(argc, argv);
QWidget window;
window.setWindowTitle("Hello world");
window.show();
return app.exec();
}
我可以使用下面的命令构建它,它构建并 运行s 成功:
g++ $(pkg-config Qt5Widgets Qt5Core --cflags) hello.cpp $(pkg-config Qt5Widgets --libs) -o hello
现在我想静态构建应用程序,这样我就可以 deploy/run 将它作为一个独立的可执行文件。 mingw-w64-x86_64-qt5-static
包似乎就是为了这个目的而存在的,所以我用 pacman
.
安装了它(版本 5.15.1-1)
默认情况下,静态 Qt 构建的 pkg-config 文件不在 PKG_CONFIG_PATH 中,所以我更新了 PKG_CONFIG_PATH
以首先在 qt5-static 中搜索文件:
PKG_CONFIG_PATH=/mingw64/qt5-static/lib/pkgconfig:$PKG_CONFIG_PATH
我还相应地更新了我的构建命令以请求库的静态依赖项。但是,这会导致一堆错误:
$ g++ $(pkg-config Qt5Widgets Qt5Core --cflags) hello.cpp $(pkg-config Qt5Widgets --static --libs) -o hello
g++.exe: error: D:/mingwbuild/mingw-w64-qt5-static/src/x86_64/qtbase/lib/libQt5Gui.a: No such file or directory
g++.exe: error: D:/mingwbuild/mingw-w64-qt5-static/src/x86_64/qtbase/lib/libqtlibpng.a: No such file or directory
g++.exe: error: D:/mingwbuild/mingw-w64-qt5-static/src/x86_64/qtbase/lib/libqtharfbuzz.a: No such file or directory
g++.exe: error: D:/mingwbuild/mingw-w64-qt5-static/src/x86_64/qtbase/lib/libQt5Core.a: No such file or directory
g++.exe: error: D:/mingwbuild/mingw-w64-qt5-static/src/x86_64/qtbase/lib/libqtpcre2.a: No such file or directory
g++.exe: error: D:/mingwbuild/mingw-w64-qt5-static/src/x86_64/qtbase/lib/libQt5Core.a: No such file or directory
g++.exe: error: D:/mingwbuild/mingw-w64-qt5-static/src/x86_64/qtbase/lib/libqtpcre2.a: No such file or directory
g++.exe: error: D:/mingwbuild/mingw-w64-qt5-static/src/x86_64/qtbase/lib/libqtlibpng.a: No such file or directory
g++.exe: error: D:/mingwbuild/mingw-w64-qt5-static/src/x86_64/qtbase/lib/libqtharfbuzz.a: No such file or directory
g++.exe: error: D:/mingwbuild/mingw-w64-qt5-static/src/x86_64/qtbase/lib/libqtpcre2.a: No such file or directory
有问题的文件路径直接来自包中 .pc
文件的 Libs.private
部分。看起来他们可能正在使用包维护者的机器路径?
无论如何,因为我应该拥有所有这些库,所以我尝试通过管道将 pkg-config
输出通过 sed
来解决这个问题,以将绝对路径替换为相应的 -l
标志,如下所示(例如,这将 D:/mingwbuild/mingw-w64-qt5-static/src/x86_64/qtbase/lib/libqtharfbuzz.a
替换为 -lqtharfbuzz
,等等)。这导致构建成功,但是当我尝试 运行 生成的可执行文件时,我得到 运行 时间失败显示:
$ g++ --static -static-libstdc++ $(pkg-config Qt5Widgets Qt5Core --cflags) hello.cpp $(pkg-config Qt5Widgets --static --libs | sed 's/D:\/\S\+\/lib\(\S\+\)\.a\b/-l/g') -o hello
$ ./hello
qt.qpa.plugin: Could not find the Qt platform plugin "windows" in ""
This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.
那么我的问题是,如何使用 MSYS2/MinGW
和 mingw-w64-x86_64-qt5-static
构建静态 Qt 可执行文件?
编辑: 为了提供更多的透明度以防对 understanding/debugging 问题有用,我使用了 运行 相同的静态构建命令在 bash 中使用 set -x
这样您就可以看到 pkg-config
命令是如何扩展的。
没有 sed
过滤器:
$ g++ --static -static-libstdc++ $(pkg-config Qt5Widgets Qt5Core --cflags) hello.cpp $(pkg-config Qt5Widgets --static --libs) -o hello
++ pkg-config Qt5Widgets Qt5Core --cflags
++ pkg-config Qt5Widgets --static --libs
+ g++ --static -static-libstdc++ -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -IC:/msys64/mingw64/qt5-static/include/QtWidgets -IC:/msys64/mingw64/qt5-static/include -IC:/msys64/mingw64/qt5-static/include/QtGui -IC:/msys64/mingw64/qt5-static/include -IC:/msys64/mingw64/qt5-static/include/QtCore -IC:/msys64/mingw64/qt5-static/include hello.cpp -LC:/msys64/mingw64/qt5-static/lib -lQt5Widgets D:/mingwbuild/mingw-w64-qt5-static/src/x86_64/qtbase/lib/libQt5Gui.a -ld3d11 -ldxgi -ldxguid D:/mingwbuild/mingw-w64-qt5-static/src/x86_64/qtbase/lib/libqtlibpng.a D:/mingwbuild/mingw-w64-qt5-static/src/x86_64/qtbase/lib/libqtharfbuzz.a -lcomdlg32 -loleaut32 -limm32 -lglu32 -lopengl32 -lgdi32 D:/mingwbuild/mingw-w64-qt5-static/src/x86_64/qtbase/lib/libQt5Core.a -lmpr -luserenv -lversion -lz D:/mingwbuild/mingw-w64-qt5-static/src/x86_64/qtbase/lib/libqtpcre2.a -lzstd -lnetapi32 -lws2_32 -ladvapi32 -lkernel32 -lole32 -lshell32 -luuid -luser32 -lwinmm -luxtheme -ldwmapi -lshell32 -lcomdlg32 -loleaut32 -limm32 -lwinmm -lws2_32 -lole32 -luuid -ladvapi32 -lglu32 -lopengl32 -lgdi32 -luser32 -lQt5Gui -ld3d11 -ldxgi -ldxguid D:/mingwbuild/mingw-w64-qt5-static/src/x86_64/qtbase/lib/libQt5Core.a -lmpr -luserenv -lversion -lz D:/mingwbuild/mingw-w64-qt5-static/src/x86_64/qtbase/lib/libqtpcre2.a -lzstd -lnetapi32 -lws2_32 -ladvapi32 -lkernel32 -lole32 -lshell32 -luuid -luser32 -lwinmm D:/mingwbuild/mingw-w64-qt5-static/src/x86_64/qtbase/lib/libqtlibpng.a D:/mingwbuild/mingw-w64-qt5-static/src/x86_64/qtbase/lib/libqtharfbuzz.a -lz -lcomdlg32 -loleaut32 -limm32 -lwinmm -lws2_32 -lole32 -luuid -ladvapi32 -lglu32 -lopengl32 -lgdi32 -luser32 -lQt5Core -lmpr -luserenv -lversion -lz D:/mingwbuild/mingw-w64-qt5-static/src/x86_64/qtbase/lib/libqtpcre2.a -lzstd -lnetapi32 -lws2_32 -ladvapi32 -lkernel32 -lole32 -lshell32 -luuid -luser32 -lwinmm -o hello
g++.exe: error: D:/mingwbuild/mingw-w64-qt5-static/src/x86_64/qtbase/lib/libQt5Gui.a: No such file or directory
g++.exe: error: D:/mingwbuild/mingw-w64-qt5-static/src/x86_64/qtbase/lib/libqtlibpng.a: No such file or directory
g++.exe: error: D:/mingwbuild/mingw-w64-qt5-static/src/x86_64/qtbase/lib/libqtharfbuzz.a: No such file or directory
g++.exe: error: D:/mingwbuild/mingw-w64-qt5-static/src/x86_64/qtbase/lib/libQt5Core.a: No such file or directory
g++.exe: error: D:/mingwbuild/mingw-w64-qt5-static/src/x86_64/qtbase/lib/libqtpcre2.a: No such file or directory
g++.exe: error: D:/mingwbuild/mingw-w64-qt5-static/src/x86_64/qtbase/lib/libQt5Core.a: No such file or directory
g++.exe: error: D:/mingwbuild/mingw-w64-qt5-static/src/x86_64/qtbase/lib/libqtpcre2.a: No such file or directory
g++.exe: error: D:/mingwbuild/mingw-w64-qt5-static/src/x86_64/qtbase/lib/libqtlibpng.a: No such file or directory
g++.exe: error: D:/mingwbuild/mingw-w64-qt5-static/src/x86_64/qtbase/lib/libqtharfbuzz.a: No such file or directory
g++.exe: error: D:/mingwbuild/mingw-w64-qt5-static/src/x86_64/qtbase/lib/libqtpcre2.a: No such file or directory
使用 sed
过滤器:
$ g++ --static -static-libstdc++ $(pkg-config Qt5Widgets Qt5Core --cflags) hello.cpp $(pkg-config Qt5Widgets --static --libs | sed 's/D:\/\S\+\/lib\(\S\+\)\.a\b/-l/g') -o hello
++ pkg-config Qt5Widgets Qt5Core --cflags
++ pkg-config Qt5Widgets --static --libs
++ sed 's/D:\/\S\+\/lib\(\S\+\)\.a\b/-l/g'
+ g++ --static -static-libstdc++ -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -IC:/msys64/mingw64/qt5-static/include/QtWidgets -IC:/msys64/mingw64/qt5-static/include -IC:/msys64/mingw64/qt5-static/include/QtGui -IC:/msys64/mingw64/qt5-static/include -IC:/msys64/mingw64/qt5-static/include/QtCore -IC:/msys64/mingw64/qt5-static/include hello.cpp -LC:/msys64/mingw64/qt5-static/lib -lQt5Widgets -lQt5Gui -ld3d11 -ldxgi -ldxguid -lqtlibpng -lqtharfbuzz -lcomdlg32 -loleaut32 -limm32 -lglu32 -lopengl32 -lgdi32 -lQt5Core -lmpr -luserenv -lversion -lz -lqtpcre2 -lzstd -lnetapi32 -lws2_32 -ladvapi32 -lkernel32 -lole32 -lshell32 -luuid -luser32 -lwinmm -luxtheme -ldwmapi -lshell32 -lcomdlg32 -loleaut32 -limm32 -lwinmm -lws2_32 -lole32 -luuid -ladvapi32 -lglu32 -lopengl32 -lgdi32 -luser32 -lQt5Gui -ld3d11 -ldxgi -ldxguid -lQt5Core -lmpr -luserenv -lversion -lz -lqtpcre2 -lzstd -lnetapi32 -lws2_32 -ladvapi32 -lkernel32 -lole32 -lshell32 -luuid -luser32 -lwinmm -lqtlibpng -lqtharfbuzz -lz -lcomdlg32 -loleaut32 -limm32 -lwinmm -lws2_32 -lole32 -luuid -ladvapi32 -lglu32 -lopengl32 -lgdi32 -luser32 -lQt5Core -lmpr -luserenv -lversion -lz -lqtpcre2 -lzstd -lnetapi32 -lws2_32 -ladvapi32 -lkernel32 -lole32 -lshell32 -luuid -luser32 -lwinmm -o hello
此外,目前我只对了解如何使用现有包 MSYS2 包从 MSYS2/Mingw 中的命令行构建这个简单的示例感兴趣。我还没有兴趣使用 Qt Creator/QMake/etc。管理构建。
您必须构建 Qt 库的静态版本(它们只分发动态库)。
本页:
不完全准确(我已经编辑了几次),但这是一个好的开始。
看起来它正在寻找绝对位置 D:/mingwbuild/mingw-w64-qt5-static/src/x86_64/qtbase/lib/
中的库。那不是你有库文件的地方是正确的吗?
一个肮脏的解决方法是将它们复制到这个确切的位置。
您也可以尝试添加 pkg-config 选项 --define-prefix
以查看是否修复了报告的库文件路径。
要自己构建静态 Qt,请在此处查看我之前的说明:
how to statically compile Qt using MinGW compiler and SSL support
为了避免 qt.qpa.plugin: Could not find the Qt platform plugin "windows" in ""
,您需要 link 静态地针对 Windows 平台插件。很可能你还想 link 静态地对抗其他插件,例如用于 Qt Widgets 样式或 SVG 图标支持。
建议阅读官方文档:https://doc.qt.io/qt-5/plugins-howto.html#static-plugins
“创建静态插件”下的步骤很重要。由于您可能只使用 Qt 提供的插件,因此您当然可以跳过第一步。由于您没有使用 QMake,因此您无法执行最后一步,而是需要手动将插件的相应静态库添加到您的 linker 调用(以及它所依赖的库)中。使用 pacman -Ql mingw-w64-x86_64-qt5-static
查找安装中插件的路径。
我正在尝试使用 MSYS2/MinGW.
为 Windows 构建一个简单的 Qt 应用程序,如下所示hello.cpp:
#include <QApplication>
#include <QWidget>
int main(int argc, char **argv)
{
QApplication app(argc, argv);
QWidget window;
window.setWindowTitle("Hello world");
window.show();
return app.exec();
}
我可以使用下面的命令构建它,它构建并 运行s 成功:
g++ $(pkg-config Qt5Widgets Qt5Core --cflags) hello.cpp $(pkg-config Qt5Widgets --libs) -o hello
现在我想静态构建应用程序,这样我就可以 deploy/run 将它作为一个独立的可执行文件。 mingw-w64-x86_64-qt5-static
包似乎就是为了这个目的而存在的,所以我用 pacman
.
默认情况下,静态 Qt 构建的 pkg-config 文件不在 PKG_CONFIG_PATH 中,所以我更新了 PKG_CONFIG_PATH
以首先在 qt5-static 中搜索文件:
PKG_CONFIG_PATH=/mingw64/qt5-static/lib/pkgconfig:$PKG_CONFIG_PATH
我还相应地更新了我的构建命令以请求库的静态依赖项。但是,这会导致一堆错误:
$ g++ $(pkg-config Qt5Widgets Qt5Core --cflags) hello.cpp $(pkg-config Qt5Widgets --static --libs) -o hello
g++.exe: error: D:/mingwbuild/mingw-w64-qt5-static/src/x86_64/qtbase/lib/libQt5Gui.a: No such file or directory
g++.exe: error: D:/mingwbuild/mingw-w64-qt5-static/src/x86_64/qtbase/lib/libqtlibpng.a: No such file or directory
g++.exe: error: D:/mingwbuild/mingw-w64-qt5-static/src/x86_64/qtbase/lib/libqtharfbuzz.a: No such file or directory
g++.exe: error: D:/mingwbuild/mingw-w64-qt5-static/src/x86_64/qtbase/lib/libQt5Core.a: No such file or directory
g++.exe: error: D:/mingwbuild/mingw-w64-qt5-static/src/x86_64/qtbase/lib/libqtpcre2.a: No such file or directory
g++.exe: error: D:/mingwbuild/mingw-w64-qt5-static/src/x86_64/qtbase/lib/libQt5Core.a: No such file or directory
g++.exe: error: D:/mingwbuild/mingw-w64-qt5-static/src/x86_64/qtbase/lib/libqtpcre2.a: No such file or directory
g++.exe: error: D:/mingwbuild/mingw-w64-qt5-static/src/x86_64/qtbase/lib/libqtlibpng.a: No such file or directory
g++.exe: error: D:/mingwbuild/mingw-w64-qt5-static/src/x86_64/qtbase/lib/libqtharfbuzz.a: No such file or directory
g++.exe: error: D:/mingwbuild/mingw-w64-qt5-static/src/x86_64/qtbase/lib/libqtpcre2.a: No such file or directory
有问题的文件路径直接来自包中 .pc
文件的 Libs.private
部分。看起来他们可能正在使用包维护者的机器路径?
无论如何,因为我应该拥有所有这些库,所以我尝试通过管道将 pkg-config
输出通过 sed
来解决这个问题,以将绝对路径替换为相应的 -l
标志,如下所示(例如,这将 D:/mingwbuild/mingw-w64-qt5-static/src/x86_64/qtbase/lib/libqtharfbuzz.a
替换为 -lqtharfbuzz
,等等)。这导致构建成功,但是当我尝试 运行 生成的可执行文件时,我得到 运行 时间失败显示:
$ g++ --static -static-libstdc++ $(pkg-config Qt5Widgets Qt5Core --cflags) hello.cpp $(pkg-config Qt5Widgets --static --libs | sed 's/D:\/\S\+\/lib\(\S\+\)\.a\b/-l/g') -o hello
$ ./hello
qt.qpa.plugin: Could not find the Qt platform plugin "windows" in ""
This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.
那么我的问题是,如何使用 MSYS2/MinGW
和 mingw-w64-x86_64-qt5-static
构建静态 Qt 可执行文件?
编辑: 为了提供更多的透明度以防对 understanding/debugging 问题有用,我使用了 运行 相同的静态构建命令在 bash 中使用 set -x
这样您就可以看到 pkg-config
命令是如何扩展的。
没有 sed
过滤器:
$ g++ --static -static-libstdc++ $(pkg-config Qt5Widgets Qt5Core --cflags) hello.cpp $(pkg-config Qt5Widgets --static --libs) -o hello
++ pkg-config Qt5Widgets Qt5Core --cflags
++ pkg-config Qt5Widgets --static --libs
+ g++ --static -static-libstdc++ -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -IC:/msys64/mingw64/qt5-static/include/QtWidgets -IC:/msys64/mingw64/qt5-static/include -IC:/msys64/mingw64/qt5-static/include/QtGui -IC:/msys64/mingw64/qt5-static/include -IC:/msys64/mingw64/qt5-static/include/QtCore -IC:/msys64/mingw64/qt5-static/include hello.cpp -LC:/msys64/mingw64/qt5-static/lib -lQt5Widgets D:/mingwbuild/mingw-w64-qt5-static/src/x86_64/qtbase/lib/libQt5Gui.a -ld3d11 -ldxgi -ldxguid D:/mingwbuild/mingw-w64-qt5-static/src/x86_64/qtbase/lib/libqtlibpng.a D:/mingwbuild/mingw-w64-qt5-static/src/x86_64/qtbase/lib/libqtharfbuzz.a -lcomdlg32 -loleaut32 -limm32 -lglu32 -lopengl32 -lgdi32 D:/mingwbuild/mingw-w64-qt5-static/src/x86_64/qtbase/lib/libQt5Core.a -lmpr -luserenv -lversion -lz D:/mingwbuild/mingw-w64-qt5-static/src/x86_64/qtbase/lib/libqtpcre2.a -lzstd -lnetapi32 -lws2_32 -ladvapi32 -lkernel32 -lole32 -lshell32 -luuid -luser32 -lwinmm -luxtheme -ldwmapi -lshell32 -lcomdlg32 -loleaut32 -limm32 -lwinmm -lws2_32 -lole32 -luuid -ladvapi32 -lglu32 -lopengl32 -lgdi32 -luser32 -lQt5Gui -ld3d11 -ldxgi -ldxguid D:/mingwbuild/mingw-w64-qt5-static/src/x86_64/qtbase/lib/libQt5Core.a -lmpr -luserenv -lversion -lz D:/mingwbuild/mingw-w64-qt5-static/src/x86_64/qtbase/lib/libqtpcre2.a -lzstd -lnetapi32 -lws2_32 -ladvapi32 -lkernel32 -lole32 -lshell32 -luuid -luser32 -lwinmm D:/mingwbuild/mingw-w64-qt5-static/src/x86_64/qtbase/lib/libqtlibpng.a D:/mingwbuild/mingw-w64-qt5-static/src/x86_64/qtbase/lib/libqtharfbuzz.a -lz -lcomdlg32 -loleaut32 -limm32 -lwinmm -lws2_32 -lole32 -luuid -ladvapi32 -lglu32 -lopengl32 -lgdi32 -luser32 -lQt5Core -lmpr -luserenv -lversion -lz D:/mingwbuild/mingw-w64-qt5-static/src/x86_64/qtbase/lib/libqtpcre2.a -lzstd -lnetapi32 -lws2_32 -ladvapi32 -lkernel32 -lole32 -lshell32 -luuid -luser32 -lwinmm -o hello
g++.exe: error: D:/mingwbuild/mingw-w64-qt5-static/src/x86_64/qtbase/lib/libQt5Gui.a: No such file or directory
g++.exe: error: D:/mingwbuild/mingw-w64-qt5-static/src/x86_64/qtbase/lib/libqtlibpng.a: No such file or directory
g++.exe: error: D:/mingwbuild/mingw-w64-qt5-static/src/x86_64/qtbase/lib/libqtharfbuzz.a: No such file or directory
g++.exe: error: D:/mingwbuild/mingw-w64-qt5-static/src/x86_64/qtbase/lib/libQt5Core.a: No such file or directory
g++.exe: error: D:/mingwbuild/mingw-w64-qt5-static/src/x86_64/qtbase/lib/libqtpcre2.a: No such file or directory
g++.exe: error: D:/mingwbuild/mingw-w64-qt5-static/src/x86_64/qtbase/lib/libQt5Core.a: No such file or directory
g++.exe: error: D:/mingwbuild/mingw-w64-qt5-static/src/x86_64/qtbase/lib/libqtpcre2.a: No such file or directory
g++.exe: error: D:/mingwbuild/mingw-w64-qt5-static/src/x86_64/qtbase/lib/libqtlibpng.a: No such file or directory
g++.exe: error: D:/mingwbuild/mingw-w64-qt5-static/src/x86_64/qtbase/lib/libqtharfbuzz.a: No such file or directory
g++.exe: error: D:/mingwbuild/mingw-w64-qt5-static/src/x86_64/qtbase/lib/libqtpcre2.a: No such file or directory
使用 sed
过滤器:
$ g++ --static -static-libstdc++ $(pkg-config Qt5Widgets Qt5Core --cflags) hello.cpp $(pkg-config Qt5Widgets --static --libs | sed 's/D:\/\S\+\/lib\(\S\+\)\.a\b/-l/g') -o hello
++ pkg-config Qt5Widgets Qt5Core --cflags
++ pkg-config Qt5Widgets --static --libs
++ sed 's/D:\/\S\+\/lib\(\S\+\)\.a\b/-l/g'
+ g++ --static -static-libstdc++ -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -IC:/msys64/mingw64/qt5-static/include/QtWidgets -IC:/msys64/mingw64/qt5-static/include -IC:/msys64/mingw64/qt5-static/include/QtGui -IC:/msys64/mingw64/qt5-static/include -IC:/msys64/mingw64/qt5-static/include/QtCore -IC:/msys64/mingw64/qt5-static/include hello.cpp -LC:/msys64/mingw64/qt5-static/lib -lQt5Widgets -lQt5Gui -ld3d11 -ldxgi -ldxguid -lqtlibpng -lqtharfbuzz -lcomdlg32 -loleaut32 -limm32 -lglu32 -lopengl32 -lgdi32 -lQt5Core -lmpr -luserenv -lversion -lz -lqtpcre2 -lzstd -lnetapi32 -lws2_32 -ladvapi32 -lkernel32 -lole32 -lshell32 -luuid -luser32 -lwinmm -luxtheme -ldwmapi -lshell32 -lcomdlg32 -loleaut32 -limm32 -lwinmm -lws2_32 -lole32 -luuid -ladvapi32 -lglu32 -lopengl32 -lgdi32 -luser32 -lQt5Gui -ld3d11 -ldxgi -ldxguid -lQt5Core -lmpr -luserenv -lversion -lz -lqtpcre2 -lzstd -lnetapi32 -lws2_32 -ladvapi32 -lkernel32 -lole32 -lshell32 -luuid -luser32 -lwinmm -lqtlibpng -lqtharfbuzz -lz -lcomdlg32 -loleaut32 -limm32 -lwinmm -lws2_32 -lole32 -luuid -ladvapi32 -lglu32 -lopengl32 -lgdi32 -luser32 -lQt5Core -lmpr -luserenv -lversion -lz -lqtpcre2 -lzstd -lnetapi32 -lws2_32 -ladvapi32 -lkernel32 -lole32 -lshell32 -luuid -luser32 -lwinmm -o hello
此外,目前我只对了解如何使用现有包 MSYS2 包从 MSYS2/Mingw 中的命令行构建这个简单的示例感兴趣。我还没有兴趣使用 Qt Creator/QMake/etc。管理构建。
您必须构建 Qt 库的静态版本(它们只分发动态库)。
本页:
不完全准确(我已经编辑了几次),但这是一个好的开始。
看起来它正在寻找绝对位置 D:/mingwbuild/mingw-w64-qt5-static/src/x86_64/qtbase/lib/
中的库。那不是你有库文件的地方是正确的吗?
一个肮脏的解决方法是将它们复制到这个确切的位置。
您也可以尝试添加 pkg-config 选项 --define-prefix
以查看是否修复了报告的库文件路径。
要自己构建静态 Qt,请在此处查看我之前的说明: how to statically compile Qt using MinGW compiler and SSL support
为了避免 qt.qpa.plugin: Could not find the Qt platform plugin "windows" in ""
,您需要 link 静态地针对 Windows 平台插件。很可能你还想 link 静态地对抗其他插件,例如用于 Qt Widgets 样式或 SVG 图标支持。
建议阅读官方文档:https://doc.qt.io/qt-5/plugins-howto.html#static-plugins
“创建静态插件”下的步骤很重要。由于您可能只使用 Qt 提供的插件,因此您当然可以跳过第一步。由于您没有使用 QMake,因此您无法执行最后一步,而是需要手动将插件的相应静态库添加到您的 linker 调用(以及它所依赖的库)中。使用 pacman -Ql mingw-w64-x86_64-qt5-static
查找安装中插件的路径。