кросс-компилятор mingw не будет связывать статические библиотеки Qt - PullRequest
0 голосов
/ 20 сентября 2019

У меня проблемы с тем, чтобы Qt статически связывал свои библиотеки при кросс-компиляции с моего компьютера с Linux на Windows.Я добавил это в мою конфигурацию, чтобы сделать статическую компиляцию статически.

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

Как видите, статические флаги передаются компилятору правильно, однако я попытался запустить полученный exe-файл как в WINE, так и на машине с Windows, но в обоих случаях он говорит мне, что ему не удалось найти DLL-файлы Qt.,В журнале ошибок вина было больше информации, поэтому он предоставляет

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

Я работаю на компьютере с Arch Linux с последним пакетом qt5base aur (5.13.1) и последним пакетом mignw (g ++)9.2.0)

1 Ответ

0 голосов
/ 20 сентября 2019

В командной строке вашего компилятора есть как статические, так и динамические библиотеки.Например: «/usr/i686-w64-mingw32/lib/libQt5Core.dll.a» - это библиотека импорта для динамического «Qt5Core.dll».Правильный файл, который будет связан в статическом режиме, будет "libQt5Core.a".Ваша проблема похожа на этот отчет проекта MINGW: https://github.com/msys2/MINGW-packages/issues/4970

...