Error message: module "QtQuick" version x.xx is not installed on Raspberry Pi
-
Hello -
I'm working on developing an app for the raspberry pi 4. I've got all my libraries installed manually via the command line, and am writing on windows, then transferring and compiling on the pi. Everything is going fine so far, but I have a freelancer working on a section of the app that uses qml, which I am new to.The freelancer is able to compile and run his code, but when I put it on my system I'm able to compile but not run it, and hit the error in the title when I execute:
QQmlApplicationEngine failed to load component qrc:/main.qml:2 module "QtQuick" version 2.14 is not installed
Which of course is coming from the imports:
import QtQml 2.14 import QtQuick 2.14 import QtQuick.Window 2.14 import QtQuick.Controls 2.0 import QtQuick.Layouts 1.14
I have tried to comment out some of these and see the same error for both QtQml and QtQuick modules.
The interesting thing is I had the freelancer go through and set up a new pi image and document as he went along, and he is still not seeing the issue, and I am still seeing it, despite trying this on two fresh pi images.
Here's the libraries we have installed:
qt5-default
qml-module-qtquick-controls2
qtmultimedia5-dev
libqt5multimediawidgets5
libqt5multimedia5-plugins
libqt5multimedia5
qtdeclarative5-dev
qml-module-qtquick-controls2
qml-module-qtquick-window2
qml-module-qtquick-layouts
qml-module-qtquick-controlsI believe this is coming from some path not being set up correctly along the way - I certainly have qml and qtquick installed, but it can't find it for some reason. What am I missing?? Thanks in advance for your answers!
-
Hi,
Some maybe silly questions but:
- are you using both the same distribution ?
- are you using both the same release of that distribution ? (For example Debian bulleseyes vs jessy)
- did you check the exact version of Qt installed ?
- are you using both the same package sources ?
-
I believe we're good on the first three - the last is an interesting question, he's in Georgia (the country) and I don't know what the package difference would be.
My concern is that I clearly have qml and everything surrounding it installed, but it doesn't recognize that - so if I were to start my own development with qml I assume it wouldn't work.
How can I check that environment variables for qml are set up correctly?
I guess for now I'll look up a quick qml tutorial and see if I can get it running - perhaps it's another line in his code I'm not seeing that is making this all look in the wrong place.
-
Sorry, I meant the apt sources if using Debian for example.
Did you compare the details of the packages of both your system ?
-
He's going to share his image with me tomorrow for me to check against.
In the meantime, I tried this tutorial: https://doc.qt.io/qt-5/qml-tutorial1.html And I'm getting a new, but related error when I run it:
qmlscene test.qml
qmlscene: could not find a Qt installation of ''
It's this exact same problem this person had: https://unix.stackexchange.com/questions/461083/qmlscene-could-not-find-a-qt-installation-of
It really feels like I have both qml and Qt installed, but neither one can find the other. I've been doing a lot of digging on this but nobody seems to have a good answer, but I'm guessing there's one config file somewhere with a wrong path in it. Any ideas?
-
Strange...
What do you get if your start it with the QT_DEBUG_PLUGINS environment variable set to one ?
-
Ok I went back to the actual application I've been trying to run and ran that with QT_DEBUG_PLUGINS=1. Here's part of what it spit out. A bunch of stuff came before it but it looked like that all succeeded. I included a little from around the failure for comparison.
Got keys from plugin meta data ("compose", "xim") QFactoryLoader::QFactoryLoader() looking at "/usr/lib/aarch64-linux-gnu/qt5/plugins/platforminputcontexts/libibusplatforminputcontextplugin.so" Found metadata in lib /usr/lib/aarch64-linux-gnu/qt5/plugins/platforminputcontexts/libibusplatforminputcontextplugin.so, metadata= { "IID": "org.qt-project.Qt.QPlatformInputContextFactoryInterface.5.1", "MetaData": { "Keys": [ "ibus" ] }, "className": "QIbusPlatformInputContextPlugin", "debug": false, "version": 330499 } Got keys from plugin meta data ("ibus") QFactoryLoader::QFactoryLoader() checking directory path "/home/pi/Desktop/Timeline_Widget/platforminputcontexts" ... loaded library "/usr/lib/aarch64-linux-gnu/qt5/plugins/platforminputcontexts/libcomposeplatforminputcontextplugin.so" QQmlApplicationEngine failed to load component qrc:/main.qml:1 module "QtQml" version 2.14 is not installed QFactoryLoader::QFactoryLoader() checking directory path "/usr/lib/aarch64-linux-gnu/qt5/plugins/accessiblebridge" ... QFactoryLoader::QFactoryLoader() checking directory path "/home/pi/Desktop/Timeline_Widget/accessiblebridge" ... QFactoryLoader::QFactoryLoader() checking directory path "/usr/lib/aarch64-linux-gnu/qt5/plugins/iconengines" ... QFactoryLoader::QFactoryLoader() looking at "/usr/lib/aarch64-linux-gnu/qt5/plugins/iconengines/libqsvgicon.so" Found metadata in lib /usr/lib/aarch64-linux-gnu/qt5/plugins/iconengines/libqsvgicon.so, metadata= { "IID": "org.qt-project.Qt.QIconEngineFactoryInterface", "MetaData": { "Keys": [ "svg", "svgz", "svg.gz" ] }, "className": "QSvgIconPlugin", "debug": false, "version": 330499 } Got keys from plugin meta data ("svg", "svgz", "svg.gz") QFactoryLoader::QFactoryLoader() checking directory path "/home/pi/Desktop/Timeline_Widget/iconengines" ... QLibraryPrivate::unload succeeded on "/usr/lib/aarch64-linux-gnu/qt5/plugins/platforminputcontexts/libcomposeplatforminputcontextplugin.so" QLibraryPrivate::unload succeeded on "/usr/lib/aarch64-linux-gnu/qt5/plugins/platformthemes/libqt5ct.so" QLibraryPrivate::unload succeeded on "/usr/lib/aarch64-linux-gnu/qt5/plugins/xcbglintegrations/libqxcb-glx-integration.so" QLibraryPrivate::unload succeeded on "/usr/lib/aarch64-linux-gnu/qt5/plugins/platforms/libqxcb.so" QLibraryPrivate::unload succeeded on "Xcursor" (faked)
-
Can you check which Qt version was used to build the packages you installed ? I suspect it's older than 5.14.
-
Yes - How do I do that?
I also have my freelancer's image now, and am comparing notes on it. Of course it's able to compile and run the code he's been working on, but out of curiosity I tried running the same qml tutorial, and get the same error I mentioned above:
qmlscene: could not find a Qt installation of ''
I'm not sure what to make of this...
-
Alright I tried running the app on both images. The images are different, one is the standard, and the other is the 64 bit one I've been playing with it. There could of course be differences I don't know about, but Qt seems to know where it's installed so I don't see why that would be a problem.
I ran >qtchooser -print-env< on both systems and they seem to be set up similarly.
64 bit image:
QT_SELECT="default" QTTOOLDIR="/usr/lib/qt5/bin" QTLIBDIR="/usr/lib/aarch64-linux-gnu"
32-bit standard image
QT_SELECT="default" QTTOOLDIR="/usr/lib/qt5/bin" QTLIBDIR="/usr/lib/arm-linux-gnueabihf"
I also ran the app with QT_DEBUG_PLUGINS=1 on both systems and compared where it was failing on my image
64-bit image: (same output as previously posted)
Got keys from plugin meta data ("ibus") QFactoryLoader::QFactoryLoader() checking directory path "/home/pi/Desktop/Timeline_Widget/platforminputcontexts" ... loaded library "/usr/lib/aarch64-linux-gnu/qt5/plugins/platforminputcontexts/libcomposeplatforminputcontextplugin.so" QQmlApplicationEngine failed to load component qrc:/main.qml:1 module "QtQml" version 2.14 is not installed
32-bit image:
Got keys from plugin meta data ("ibus") QFactoryLoader::QFactoryLoader() checking directory path "/home/pi/Desktop/Timeline_Widget/platforminputcontexts" ... loaded library "/usr/lib/arm-linux-gnueabihf/qt5/plugins/platforminputcontexts/libcomposeplatforminputcontextplugin.so" Found metadata in lib /usr/lib/arm-linux-gnueabihf/qt5/qml/QtQuick.2/libqtquick2plugin.so, metadata= { "IID": "org.qt-project.Qt.QQmlExtensionInterface/1.0", "MetaData": { }, "className": "QtQuick2Plugin", "debug": false, "uri": [ "QtQuick.2" ], "version": 330499 }
so it seems like where it broke on the 64 bit image is in looking for the file /usr/lib/aarch64-linux-gnu/qt5/qml/QtQuick.2/libqtquick2plugin.so, which definitely exists.
How can I debug that file? maybe it's the wrong version, compiled on the wrong version, etc?
I'll try this on my own 32-bit image as well haha - causing problems for myself, probably. :)
-
You can use
apt show <package_name>
to gather information about the package. -
Ok- I wanted to finish setting back up the 32 bit image; apparently I overwrote it a few days ago haha.
So anyway, that image spits out the same issue as the 64 bit, just with that slightly modified path (/usr/lib/arm-linux-gnueabihf/)
It looks like all the packages are 5.11. I went through some with apt show <package> and then it prints that info when you do a fresh install of all of them like I just did.
Two questions - why is that a problem, and how do I fix it?
-
Your application uses a QtQuick import from a later version of Qt.
Either install a more recent version of Qt or change the import to match your Qt 5.11.
-
So he built Qt himself ?
-
Yeah this is basically solved now, this was mostly a miscommunication between us haha. He had built 5.14 himself, written some code, then switched branches and put 5.11 import statements on that branch without me realizing what had happened.
Thanks for your help, @SGaist !
Also, I don't have a solution for the "qmlscene could not find a Qt installation of ''" but that's not pertinent to our development so if I find a solution later I'll come back to it.