LINUX.ORG.RU

Ответ на: комментарий от EXL

здрасте, windeployqt забагован с 5.14.0 по 5.15* и просто не работает, что заменяется тотальным ctrl+c/ctrl+v, что я и сделал, а вторую ссылку почитайте сами

скопировал в каталог с .exe все qml директории, все директории плагинов, всё как всегда

luntik2012
() автор топика
Ответ на: комментарий от EXL

короче проблема оказалась в том, что при использовании static qt нужно руками импортировать плагины типа такого

Q_IMPORT_PLUGIN(QtQuick2Plugin) Q_IMPORT_PLUGIN(QtQuickControls2Plugin) Q_IMPORT_PLUGIN(QtQuickTemplates2Plugin) Q_IMPORT_PLUGIN(QtQuick2WindowPlugin) Q_IMPORT_PLUGIN(QtQuickLayoutsPlugin);

только линковщик на это выдаёт

undefined reference to `qt_static_plugin_QtQuick2Plugin()'

и т.д. по остальным

пока не смог нагуглить, что нужно сделать в cmake проекте, чтобы всё заработало. взял просто новый проект создал qml-ный пустой, не заводится

luntik2012
() автор топика
Ответ на: комментарий от EXL

статическая линковка, которая по сути – зло.

вопрос религии, лично мне поднадоело с .so/.dll деплоить, не очень удобно.

https://github.com/msys2/MINGW-packages/issues/1942#issuecomment-308181711

там косяк самого msys с проблемами линковки virtualkeyboard плагина к остальным плагинам. у меня же сама прога никуда не линукется (в смысле фейлится).

в CMakeLists.txt сделал так:

qt5_import_plugins(${PROJECT_NAME}
    INCLUDE
    Qt5::QtQuickControls2Plugin
    Qt5::QtQuick2Plugin
    Qt5::QtQuickLayoutsPlugin
    Qt5::QtQuickTemplates2Plugin
    Qt5::QtQuickWindowPlugin
    Qt5::QtQuick2WindowPlugin
    Qt5::QWindowsIntegrationPlugin)

в main.cpp сделал так (это вроде как правильно, на гитхабе у всех так):

Q_IMPORT_PLUGIN(QtQuick2Plugin)
Q_IMPORT_PLUGIN(QtQuickControls2Plugin)
Q_IMPORT_PLUGIN(QtQuickTemplates2Plugin)
Q_IMPORT_PLUGIN(QtQuick2WindowPlugin)
Q_IMPORT_PLUGIN(QtQuickLayoutsPlugin)
Q_IMPORT_PLUGIN(QWindowsIntegrationPlugin)

из них из всех линукется только с QWindowsIntegrationPlugin. в самом mxe QWindowsIntegrationPlugin действительно есть, на quick* там лежат *.a либы

$ find . | grep -i plugin | grep quick
./plugins/examples/qt5-freeze/qtquickcontrols.mk
./plugins/examples/qt5-freeze/qtquickcontrols2.mk
./usr/x86_64-w64-mingw32.static/qt5/qml/QtQuick.2/qtquick2plugin.prl
./usr/x86_64-w64-mingw32.static/qt5/qml/QtQuick.2/libqtquick2plugin.a
./usr/x86_64-w64-mingw32.static/qt5/qml/Qt3D/Logic/quick3dlogicplugin.prl
./usr/x86_64-w64-mingw32.static/qt5/qml/Qt3D/Logic/libquick3dlogicplugin.a
./usr/x86_64-w64-mingw32.static/qt5/qml/Qt3D/Extras/libquick3dextrasplugin.a
./usr/x86_64-w64-mingw32.static/qt5/qml/Qt3D/Extras/quick3dextrasplugin.prl
./usr/x86_64-w64-mingw32.static/qt5/qml/Qt3D/Animation/quick3danimationplugin.prl
./usr/x86_64-w64-mingw32.static/qt5/qml/Qt3D/Animation/libquick3danimationplugin.a
./usr/x86_64-w64-mingw32.static/qt5/qml/Qt3D/Input/quick3dinputplugin.prl
./usr/x86_64-w64-mingw32.static/qt5/qml/Qt3D/Input/libquick3dinputplugin.a
./usr/x86_64-w64-mingw32.static/qt5/qml/Qt3D/Render/libquick3drenderplugin.a
./usr/x86_64-w64-mingw32.static/qt5/qml/Qt3D/Render/quick3drenderplugin.prl
./usr/x86_64-w64-mingw32.static/qt5/qml/Qt3D/Core/libquick3dcoreplugin.a
...

$ find . | grep Plugin | grep -v cpp
./usr/x86_64-pc-linux-gnu/share/cmake-3.15/include/cmCPluginAPI.h
./usr/x86_64-w64-mingw32.static/qt5/mkspecs/features/data/cmake/Qt5PluginTarget.cmake.in
./usr/x86_64-w64-mingw32.static/qt5/include/QtVirtualKeyboard/QVirtualKeyboardExtensionPlugin
./usr/x86_64-w64-mingw32.static/qt5/include/QtMultimedia/QAudioSystemPlugin
./usr/x86_64-w64-mingw32.static/qt5/include/QtMultimedia/QMediaServiceProviderPlugin
./usr/x86_64-w64-mingw32.static/qt5/include/QtCore/QPluginLoader
./usr/x86_64-w64-mingw32.static/qt5/include/QtCore/QtPluginInstanceFunction
./usr/x86_64-w64-mingw32.static/qt5/include/QtCore/QtPluginMetaDataFunction
./usr/x86_64-w64-mingw32.static/qt5/include/QtCore/QPluginMetaData
./usr/x86_64-w64-mingw32.static/qt5/include/QtCore/QtPlugin
./usr/x86_64-w64-mingw32.static/qt5/include/QtCore/QStaticPlugin
./usr/x86_64-w64-mingw32.static/qt5/include/QtSql/QSqlDriverPlugin
./usr/x86_64-w64-mingw32.static/qt5/include/QtUiPlugin
./usr/x86_64-w64-mingw32.static/qt5/include/QtUiPlugin/QtUiPluginVersion
./usr/x86_64-w64-mingw32.static/qt5/include/QtUiPlugin/QtUiPlugin
./usr/x86_64-w64-mingw32.static/qt5/include/QtUiPlugin/QDesignerCustomWidgetCollectionInterface
./usr/x86_64-w64-mingw32.static/qt5/include/QtUiPlugin/qdesignerexportwidget.h
./usr/x86_64-w64-mingw32.static/qt5/include/QtUiPlugin/QDesignerExportWidget
./usr/x86_64-w64-mingw32.static/qt5/include/QtUiPlugin/qtuipluginversion.h
./usr/x86_64-w64-mingw32.static/qt5/include/QtUiPlugin/QDesignerCustomWidgetInterface
./usr/x86_64-w64-mingw32.static/qt5/include/QtUiPlugin/customwidget.h
...

ошибка:

[ 10%] Linking CXX executable qml_hello_world.exe
CMakeFiles/qml_hello_world.dir/objects.a(main.cpp.obj):main.cpp:(.text.startup+0x27): undefined reference to `qt_static_plugin_QtQuick2Plugin()'
CMakeFiles/qml_hello_world.dir/objects.a(main.cpp.obj):main.cpp:(.text.startup+0x37): undefined reference to `qt_static_plugin_QtQuickControls2Plugin()'
CMakeFiles/qml_hello_world.dir/objects.a(main.cpp.obj):main.cpp:(.text.startup+0x47): undefined reference to `qt_static_plugin_QtQuickTemplates2Plugin()'
CMakeFiles/qml_hello_world.dir/objects.a(main.cpp.obj):main.cpp:(.text.startup+0x57): undefined reference to `qt_static_plugin_QtQuick2WindowPlugin()'
CMakeFiles/qml_hello_world.dir/objects.a(main.cpp.obj):main.cpp:(.text.startup+0x67): undefined reference to `qt_static_plugin_QtQuickLayoutsPlugin()'
collect2: error: ld returned 1 exit status

ссылка на проект (там бардак, правда, разные способы пробовал):

https://github.com/luntik2012/qml_hello_world

вообще в итоге хочу одной строчкой делать билды/деплой/инсталляки под linux/windows сразу

luntik2012
() автор топика
Последнее исправление: luntik2012 (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.