Unknown module(s) in QT: quick qml



  • I'm developing for an embedded ARM Linux system, and I've just now been able to:

    • Successfully build Qt 5.2.1 and install it on my target.
    • Installed Qt Creator on my Ubuntu 12.04 VM.
    • Built, deployed, and debugged a widgets application from my host to my target

    However, I cannot do the same with a Qt Quick application. For example, when I try to load and build an application that uses Qt Quick (such as the "Qt Quick Controls - Gallery" example that is installed with Creator), I get the error "Unknown modules(s) in QT: quick qml".

    The libraries that ended up on my target are: libQt5Concurrent.so libQt5Core.so libQt5Gui.so libQt5Network.so libQt5OpenGL.so libQt5PrintSupport.so libQt5Sql.so libQt5Test.so libQt5Widgets.so libQt5Xml.so

    I notice that libQt5Quick.so and libQt5Qml.so are not in that list. I looked through the Qt configure documentation, but it does not appear that Qt Quick is an option that can be enabled/disabled, so I assume it should have been built and installed?

    Here is the output from configure if it might help:

    @Building on: linux-g++ (i386, CPU features:)
    Building for: arm-linux-gnueabihf-g++ (arm, CPU features:)
    Platform notes:

            - Also available for Linux: linux-kcc linux-icc linux-cxx
    

    qmake vars .......... styles += mac fusion windows DEFINES += QT_NO_MTDEV DEFINES += QT_NO_XCB DEFINES += QT_NO_XKBCOMMON sql-drivers = sql-plugins = sqlite qmake switches .........

    Build options:
    Configuration .......... accessibility alsa audio-backend c++11 clock-gettime clock-monotonic compile_examples concurrent cross_compile egl eglfs evdev eventfd freetype full-config getaddrinfo getifaddrs
    iconv inotify ipv6ifname large-config largefile libudev linuxfb medium-config minimal-config mremap neon nis no-harfbuzz opengl opengles2 openssl pcre png posix_fallocate qpa qpa reduce_exports reduce_rel
    ocations release rpath shared small-config system-jpeg system-png system-zlib
    Build parts ............ libs examples
    Mode ................... release
    Using C++11 ............ yes
    Using PCH .............. no
    Target compiler supports:
    iWMMXt/Neon .......... no/yes

    Qt modules and options:
    Qt D-Bus ............... no
    Qt Concurrent .......... yes
    Qt GUI ................. yes
    Qt Widgets ............. yes
    JavaScriptCore JIT ..... yes (To be decided by JavaScriptCore)
    QML debugging .......... yes
    Use system proxies ..... no

    Support enabled for:
    Accessibility .......... yes
    ALSA ................... yes
    CUPS ................... no
    FontConfig ............. no
    FreeType ............... yes
    Iconv .................. yes
    ICU .................... no
    Image formats:
    GIF .................. yes (plugin, using bundled copy)
    JPEG ................. yes (plugin, using system library)
    PNG .................. yes (in QtGui, using system library)
    Glib ................... no
    GTK theme .............. no
    Large File ............. yes
    mtdev .................. no
    Networking:
    getaddrinfo .......... yes
    getifaddrs ........... yes
    IPv6 ifname .......... yes
    OpenSSL .............. yes (loading libraries at run-time)
    NIS .................... yes
    OpenGL ................. yes (OpenGL ES 2.x)
    OpenVG ................. no
    PCRE ................... yes (bundled copy)
    pkg-config ............. yes
    PulseAudio ............. no
    QPA backends:
    DirectFB ............. no
    EGLFS ................ yes
    KMS .................. no
    LinuxFB .............. yes
    XCB .................. no
    Session management ..... yes
    SQL drivers:
    DB2 .................. no
    InterBase ............ no
    MySQL ................ no
    OCI .................. no
    ODBC ................. no
    PostgreSQL ........... no
    SQLite 2 ............. no
    SQLite ............... yes (plugin, using bundled copy)
    TDS .................. no
    udev ................... yes
    xkbcommon .............. no
    zlib ................... yes (system library)
    @


  • Moderators

    Have you skipped any modules (QtQuick1, QtScript, QtSvg, maybe QtWebKit)? For unknown (to me) reasons, that sometimes causes QtQuick 2 not to be build.



  • I don't believe I did.

    Is there a log of the build results somewhere? I did an out-of-tree build and cannot find one. It would be nice to know if an error had occured during the build, although I assume there were no errors since there was no message at the end of the build...

    I did specifically turn off glib support with "-no-glib", because configure would not complete without that option. From what I read around the 'net, glib doesn't seem like a requirement to get Quick working.

    Here is the configure command line I used, as well as the qmake.conf from the device directory:

    @./configure -debug -opengl es2 -device linux-am335x-g++ -device-option CROSS_COMPILE=/home/steve/ti-sdk-am335x-evm-07.00.00.00/linux-devkit/sysroots/i686-arago-linux/usr/bin/arm-linux-gnueabihf- -sysroot /home/steve/ti-sdk-am335x-evm-07.00.00.00/linux-devkit/sysroots/cortexa8hf-vfp-neon-3.8-oe-linux-gnueabi -prefix /home/steve/ti-sdk-am335x-evm-07.00.00.00/targetNFS -no-glib
    @

    Here is the qmake.conf:

    @MAKEFILE_GENERATOR = UNIX
    CONFIG += incremental gdb_dwarf_index
    QMAKE_INCREMENTAL_STYLE = sublib

    include(../../common/linux.conf)
    include(../../common/gcc-base-unix.conf)
    include(../../common/g++-unix.conf)

    load(device_config)

    QT_QPA_DEFAULT_PLATFORM = eglfs

    modifications to g++.conf

    QMAKE_CC = $${CROSS_COMPILE}gcc
    QMAKE_CXX = $${CROSS_COMPILE}g++
    QMAKE_LINK = $${QMAKE_CXX}
    QMAKE_LINK_SHLIB = $${QMAKE_CXX}

    modifications to linux.conf

    QMAKE_AR = $${CROSS_COMPILE}ar cqs
    QMAKE_OBJCOPY = $${CROSS_COMPILE}objcopy
    QMAKE_NM = $${CROSS_COMPILE}nm -P
    QMAKE_STRIP = $${CROSS_COMPILE}strip

    COMPILER_FLAGS = -march=armv7-a -mtune=cortex-a8 -mfpu=neon -mfloat-abi=hard

    #modifications to gcc-base.conf
    QMAKE_CFLAGS += $${COMPILER_FLAGS}
    QMAKE_CXXFLAGS += $${COMPILER_FLAGS}
    QMAKE_CXXFLAGS_RELEASE += -O3

    QMAKE_LIBS += -lrt -lpthread -ldl

    Extra stuff (OpenGL, DirectFB, ...)

    QMAKE_INCDIR_EGL = $$[QT_SYSROOT]/usr/include
    QMAKE_LIBDIR_EGL = $$[QT_SYSROOT]/usr/lib
    QMAKE_INCDIR_OPENGL_ES2 = $${QMAKE_INCDIR_EGL}
    QMAKE_LIBDIR_OPENGL_ES2 = $${QMAKE_LIBDIR_EGL}
    QMAKE_INCDIR_OPENVG = $${QMAKE_INCDIR_EGL}
    QMAKE_LIBDIR_OPENVG = $${QMAKE_LIBDIR_EGL}

    QMAKE_LIBS_EGL = -lEGL -lIMGegl -lsrv_um
    QMAKE_LIBS_OPENGL_ES2 = -lGLESv2 $${QMAKE_LIBS_EGL}
    QMAKE_LIBS_OPENVG = -lOpenVG $${QMAKE_LIBS_EGL}

    Sanity check

    deviceSanityCheckCompiler()

    load(qt_config)
    @


  • Moderators

    Hm, that looks correct. I do not know how to help, sorry. I guess something has failed along the way, maybe the modules were compiled but not installed properly.



  • I solved the same problem on windows.
    Problem occured when i started config and then make from qbase folder.
    When i started it from Src folder - problem dissapeared.



  • See readme file in Src folder



  • Src i mean - is root folder with qt source


  • Moderators

    [quote author="mib383" date="1402037969"]I solved the same problem on windows.
    Problem occured when i started config and then make from qbase folder.
    When i started it from Src folder - problem dissapeared.[/quote]Yes, you are supposed to build from the root folder, not qtbase.



  • In my situation I did build from the root folder, and performed the build out-of-tree. I created a directory, and called configure from that directory, did the make and make install.

    It does turn out to be an installation problem - the libraries were actually built. For example, I found ./qtdeclarative/lib/libQt5Qml.so in my build tree.

    When I go to Options | Build & Run, on the Qt Versions tab, I've added the qmake that is in my build directory, but there is a warning "Non-installed -prefix build - for internal development only." What is this warning?

    Also, when during the build is it trying to find the quick and QML libraries? It's not looking on the target as far as I can tell, so what is telling Creator that these libraries exist (or don't)?


  • Moderators

    Out-of-source prefixed builds are not working very well when cross-compiling. I recommend doing in-source builds when compiling for ARM and Android.



  • Ok, so I reconfigured and re-built using a fresh source tree, and I configured, make, make install from that source tree. This time I'm pretty sure I got everything installed properly: I added the -extprefix option to configure, which appears to be the real cause of the missing libraries.

    However, I'm still having the same problem from Creator. The quick and qml libraries are definitely on my target. I've updated my kit to point to the appropriate things, but I still get "unknown module(s) in QT: quick qml", and I still get the yellow "!" on the Qt Versions tab when setting up the kit, with the message "non-installed -prefix build - for internal development only".

    Any further suggestions? It seems like the "non-installed -prefix build" is probably the error I need fixed next, I believe.

    For the record, here is my new configure command line:

    @./configure -debug -opengl es2 -device linux-am335x-g++ -device-option CROSS_COMPILE=/home/steve/ti-sdk-am335x-evm-07.00.00.00/linux-devkit/sysroots/i686-arago-linux/usr/bin/arm-linux-gnueabihf- -sysroot /home/steve/ti-sdk-am335x-evm-07.00.00.00/linux-devkit/sysroots/cortexa8hf-vfp-neon-3.8-oe-linux-gnueabi -prefix /home/steve/ti-sdk-am335x-evm-07.00.00.00/targetNFS -extprefix /home/steve/ti-sdk-am335x-evm-07.00.00.00/targetNFS -no-glib -qpa eglfs -opensource -confirm-license@


  • Moderators

    Please pay close attention what the configure says when it's finishing: maybe you should not be running "make install" at all.



  • I have to, though - somehow the necessary files need to get into my target filesystem. I did re-run configure to find the message you're talking about (I've seen it, but I can't remember the details), but that message did not appear. Also, I don't think I fit into the category of "must not run make install".

    Here are the messages printed at the end of configure:

    NOTE: Qt is using double for qreal on this system. This is binary incompatible against Qt 5.1.
    Configure with '-qreal float' to create a build that is binary compatible with 5.1.

    Qt is now configured for building. Just run 'make'.
    Once everything is built, you must run 'make install'.
    Qt will be installed into /home/steve/ti-sdk-am335x-evm-07.00.00.00/targetNFS


  • Moderators

    Yeah, you are right. Weird :)



  • Perhaps this might shed some light? I'm not sure though...

    When setting up the Qt Version in the Options dialog, the paths for Qt are displayed like the image below. It appears most of these paths points to spots in the Qt source tree, not to where the actual installation is.

    My installation should go to /home/steve/ti-sdk-am335x-evm-07.00.00.00/targetNFS, which is the directory I'm exporting via NFS.

    !http://i.imgur.com/wvwpHjw.png(Qt kit details)!



  • I just reconfigured and re-built (with a fresh source tree), removing the -prefix option (thinking it might be conflicting with -extprefix), but no luck. AAARGH!



  • As it turns out, I needed to point Creator to the qmake of the target, not to qtbase/bin/qmake in my build tree.

    Which them leads to a new question: How does Creator make use of a binary built for a different architecture?!? It’s definately not running “qmake -query QT_SOME_VAR” on my embedded device!



  • Please, what exactly did you do to 'point Creator to the qmake of the target'?

    I think Creator is running /usr/bin/qmake, which is not the qmake from the android kit. I suppose I could use a link, but is there another way?

    I think Creator uses qmake not only to generate a makefile, but to query locations in the kit. So if it uses /usr/bin/qmake, it doesn't find the quick module (which is not installed on the original Ubuntu installation of Qt 5.2.1) But if it uses ~/Qt/5.3/android/bin/qmake, it would find the quick module.



  • Had same issue on lubuntu and Qt 5.2.1.
    I removed Qt configuration files from .config folder in my home dir.
    rm -r ~.config/QtProject
    rm ~.config/QtProject.conf

    Reconfigure project again and all works as expected


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.