mingw交叉编译器不会静态链接qt库

时间:2019-09-19 23:38:30

标签: qt cross-compiling

从Linux机器交叉编译到Windows时,我很难让Qt静态链接其库。我将此添加到配置中以进行静态编译。

win32:CONFIG += -static

通过查看make的输出,它似乎已经正确传递了标志(省略了目标文件以使其简短)

i686-w64-mingw32-g++ -static -static-libstdc++ -static-libgcc -Wl,-subsystem,windows -mthreads [exe and object files] /usr/i686-w64-mingw32/lib/libQt5Widgets.dll.a -ldwmapi -luxtheme /usr/i686-w64-mingw32/lib/libQt5Gui.dll.a -lopengl32 -lgdi32 -lcomdlg32 -loleaut32 -limm32 -ljpeg -lpng -L/usr/i686-w64-mingw32/lib -lfreetype -lbz2 -lharfbuzz -lm -lintl -lglib-2.0 -lshlwapi -lpcre -lgraphite2 /usr/i686-w64-mingw32/lib/libQt5Core.dll.a -lz -lpcre2-16 -liconv -lversion -lnetapi32 -luserenv -lole32 -luuid -lwinmm -lws2_32 -ladvapi32 -lshell32 -luser32 -lkernel32  /usr/i686-w64-mingw32/lib/libglu32.a /usr/i686-w64-mingw32/lib/libopengl32.a /usr/i686-w64-mingw32/lib/libgdi32.a /usr/i686-w64-mingw32/lib/libuser32.a -lmingw32 /usr/i686-w64-mingw32/lib/libqt5main.a -lshell32

如您所见,静态标志已正确传递给编译器,但是我尝试在WINE和Windows计算机上都运行生成的exe,但是在两种情况下,它都告诉我它找不到Qt dll。酒错误日志中有更多信息,因此这是即时消息提供的

0009:err:module:import_dll Library Qt5Core.dll (which is needed by L"Z:\\home\\zee\\mapper\\release\\mapper.exe") not found
0009:err:module:import_dll Library Qt5Gui.dll (which is needed by L"Z:\\home\\zee\\mapper\\release\\mapper.exe") not found
0009:err:module:import_dll Library Qt5Widgets.dll (which is needed by L"Z:\\home\\zee\\mapper\\release\\mapper.exe") not found
0009:err:module:LdrInitializeThunk Importing dlls for L"Z:\\home\\zee\\mapper\\release\\mapper.exe" failed, status c0000135

我正在使用最新的qt5base aur软件包(5.13.1)和最新的mignw软件包(g ++ 9.2.0)在Arch Linux计算机上运行

1 个答案:

答案 0 :(得分:0)

您的编译器命令行同时包含静态和动态库。例如:“ / usr / i686-w64-mingw32 / lib / libQt5Core.dll.a”是动态“ Qt5Core.dll”的导入库。以静态模式链接的正确文件将是“ libQt5Core.a”。您的问题类似于mingw项目的报告:https://github.com/msys2/MINGW-packages/issues/4970