How can I cross-compile QT 5.0?



  • Hi all
    I am new to QT and have cross compiled QT4.5 for arm using the
    ./configure -embedded arm (also with other options)

    But in QT5, I have not find such kind of a compile command to do the cross compile. Are there any documents that can guide me to learn how to do the cross compilation?

    Thanks!


  • Lifetime Qt Champion

    Hi and welcome to DevNet,

    You can have a look a the "RaspberryPi":http://qt-project.org/wiki/RaspberryPi_Beginners_guide guide to get the ideas of the new command line options.

    Hope it helps



  • here is an example I used for Qt 5 on beaglebone:

    ./configure -v -opensource -confirm-license -xplatform linux-arm-gnueabi-g++ -opengl es2
    -prefix /usr/local/beaglebone/qt5.0-arm
    -eglfs -no-xcb -no-cups -no-dbus -no-glib
    -no-pch -no-nis -no-accessibility -no-gtkstyle
    -nomake examples -nomake tests -nomake webkit -nomake wayland -nomake qtmultimedia

    this blog maybe helpful:
    http://tigraphics.blogspot.com/

    you'll need to get your mkspecs setup correctly too.



  • [quote author="blaroche" date="1366720593"]here is an example I used for Qt 5 on beaglebone:

    ./configure -v -opensource -confirm-license -xplatform linux-arm-gnueabi-g++ -opengl es2
    -prefix /usr/local/beaglebone/qt5.0-arm
    -eglfs -no-xcb -no-cups -no-dbus -no-glib
    -no-pch -no-nis -no-accessibility -no-gtkstyle
    -nomake examples -nomake tests -nomake webkit -nomake wayland -nomake qtmultimedia

    this blog maybe helpful:
    http://tigraphics.blogspot.com/

    you'll need to get your mkspecs setup correctly too.[/quote]

    Hi blaroche

    Thanks for your reply, but I am confused with the mkspecs, should I just copy the templates and modify them for my own compile toolschain, or should I change something else? I searched the internet but there seems no article telling how to write a mkspec.... could you link me some?

    Thanks!


  • Lifetime Qt Champion

    The standard way is to copy the mkspec that correspond to your platform (here the linux-arm-gnueabi-g++) and update it to reflect your toolchain/additional options etc...



  • since i was configuring with -xplatform linux-arm-gnueabi-g++ i edited the mkspec in the source here:
    $qtSourceDir/qtbase/mkspecs/linux-arm-gnueabi-g++/qmake.conf

    start by modifying the below to your toolchain.
    @
    QMAKE_CC = arm-linux-gnueabi-gcc
    QMAKE_CXX = arm-linux-gnueabi-g++
    QMAKE_LINK = arm-linux-gnueabi-g++
    QMAKE_LINK_SHLIB = arm-linux-gnueabi-g++

    modifications to linux.conf

    QMAKE_AR = arm-linux-gnueabi-ar cqs
    QMAKE_OBJCOPY = arm-linux-gnueabi-objcopy
    QMAKE_STRIP = arm-linux-gnueabi-strip
    @

    in my case i was using an angstrom generated toolchain, changed it to:
    @
    QMAKE_CC = arm-angstrom-linux-gnueabi-gcc
    QMAKE_CXX = arm-angstrom-linux-gnueabi-g++
    QMAKE_LINK = arm-angstrom-linux-gnueabi-g++
    QMAKE_LINK_SHLIB = arm-angstrom-linux-gnueabi-g++

    modifications to linux.conf

    QMAKE_AR = arm-angstrom-linux-gnueabi-ar cqs
    QMAKE_OBJCOPY = arm-angstrom-linux-gnueabi-objcopy
    QMAKE_STRIP = arm-angstrom-linux-gnueabi-strip
    @

    thats assuming the toolchain is in your $PATH. either add it to your path or provide the full path in your qmake.conf mkspecs.



  • When i get QT5 from website, i download only the .bin file and not the .tar.gz as in the previous versions! How is it possible to crosscompile without having the folder????


  • Lifetime Qt Champion

    You have to download the sources to cross-compile



  • do you have a link??
    So sorry but i'm quite new in this env!!!!


  • Lifetime Qt Champion



  • I am exactly following this, as I want to cross compile qt5.1.1.1/ qt5.3.1. After downloading the source code, I have changed the

    $qtSourceDir/qtbase/mkspecs/linux-arm-gnueabi-g++/qmake.conf

    to accommodate my compiler.
    My configuration is as below:
    cd $QT5_SRC_PATH
    ./configure
    -v
    -opensource
    -confirm-license
    -xplatform linux-arm-gnueabi-g++
    -prefix $ROOT_PATH/qt5-arm \
    -icu
    -no-pch
    -no-nis
    -nomake examples
    -nomake tests
    -I/$ICU_PATH/install-arm/include
    -L$ICU_PATH/install-arm/lib

    with this configuration I am able to generate the makefile. With the make I can generate the require libraries for the QT.

    Now I want to use glib and dbus library along with the config, so my new configuration is now:

    cd $QT5_SRC_PATH
    ./configure
    -v
    -opensource
    -confirm-license
    -xplatform linux-arm-gnueabi-g++
    -prefix $ROOT_PATH/qt5-arm \
    -icu
    -glib
    -dbus
    -no-pch
    -no-nis
    -nomake examples
    -nomake tests
    -I/$ICU_PATH/install-arm/include
    -L$ICU_PATH/_install-arm/lib
    -I$PATH_GLIB_HEADER -I$PATH_DBUS_HEADER
    -L$PATH_GLIB_LIB -L$PATH_DBUS_LIB

    configuration passes with out any problem. But when I am doing make it gives me following errors:

    In function qUncompress(): qbytearray.cpp undefined reference to compress2; returned with exit status:

    Any idea why I am getting this.


  • Lifetime Qt Champion

    Hi and welcome to devnet,

    Did you re-configure from a clean source tree ? If not, you need to do a make conf-clean.

    I would recommend using out of source builds. That way when you test something you only need to delete the build folder content to start again.



  • Thank you for the reply. Also one little add on in my first configuration I am also using -icu libraries ie. -licuuc -licui18n -licudata (cross compiled with arm-linux-xilinx-gnueabi-g++)

    For the -glib and -dbus, I am using the fresh source code.

    Correct me if my understanding is wrong, when we run the make after config; first of all the code generates the qmake utility and then qmake is used to generate the Qt library. So if I am right ; what I can see that, make is using the g++ compiler to build the qmake (instead of arm-linux-xilinx-gnueabi-g++) first. Due to this compiler when it tries to link the -licu, -ldbus and -lglib libraries (which were cross compiled using arm-linux-xilinx-gnueabi-g++) ; one of the error is :

    /usr/bin/ld: skipping incompatible /home/$ICU_INSTALL_PATH/lib/libicu.so when searching for -licu.

    same type of the error occurs for all the libraries ie -dbus and -glib.

    So now at this point I have two questions;

    1. How to use configure so that qmake can be build using arm-linux-xilinx-gnueabi-g++ compiler?

    2. If the make process of qmake doesn't depend on compiler, then why at the first time when I was using the -icu (cross compiled) was passing and it is failing second time when I am using -glib, -dbus?

    Can you provide little more understanding out the process, please.

    Best Regards


  • Lifetime Qt Champion

    Copy the linux-arm-gnueabi-g++ mkspec to arm-linux-xilinx-gnueabi-g++ and update it's content to use arm-linux-xilinx-gnueabi-* tools



  • yes your suggestion helped to solve the issue related to configuration, now with that I could able to run the configuration and it generated the make file: But when I am running the make; it gives me again the same problem. So I am attaching the logs:

    /usr/bin/ld: skipping incompatible /home/work/qt-5.1.1/../fs/fs/usr/lib/libdbus-1.so when searching for -ldbus-1
    /usr/bin/ld: skipping incompatible /home/work/qt-5.1.1/../fs/fs/usr/lib/libglib-2.0.so when searching for -lglib-2.0
    /usr/bin/ld: skipping incompatible /home/work/icu/install-arm/icu_build/lib/libicuuc.so when searching for -licuuc
    /usr/bin/ld: skipping incompatible /home/work/icu/install-arm/icu_build/lib/libicui18n.so when searching for -licui18n
    /usr/bin/ld: skipping incompatible /home/work/icu/install-arm/icu_build/lib/libicudata.so when searching for -licudata
    /home/work/qt-5.1.1/qtbase/lib/libQt5Bootstrap.a(qbytearray.o): In function qUncompress(unsigned char const*, int)': qbytearray.cpp:(.text._Z11qUncompressPKhi+0xde): undefined reference touncompress'
    /home/work/qt-5.1.1/qtbase/lib/libQt5Bootstrap.a(qbytearray.o): In function qCompress(unsigned char const*, int, int)': qbytearray.cpp:(.text._Z9qCompressPKhii+0xda): undefined reference tocompress2'
    collect2: ld returned 1 exit status
    make[3]: *** [../../../bin/moc] Error 1
    make[3]: Leaving directory /home/work/qt-5.1.1/qtbase/src/tools/moc' make[2]: *** [sub-moc-make_first] Error 2 make[2]: Leaving directory/home/work/qt-5.1.1/qtbase/src'
    make[1]: *** [sub-src-make_first] Error 2
    make[1]: Leaving directory `/home/work/qt-5.1.1/qtbase'
    make: *** [module-qtbase-make_first] Error 2

    From the first few lines you can see that its skipping to incorporate the required cross compiled libraries:

    When I am not including the -dbus and -glib and successfully compiling the qt libraries; I can see that there is no webkit support when I'm trying to generate the make file from the *.pro file.

    Regards



  • also I noticed that there is no webkit support even I am cross compiling the qt after enabling ICU in the configuration.
    After little search I came to know that it requires ruby, I went into the webkit directory and ran the qmake -o Makefile Webkit.pro.

    The web kit build was disabled for the following reasons:

    Missing ruby from the PATH:
    so do I need to cross compile ruby or just I need to install on the host.

    Please let me know.
    Thanks


  • Lifetime Qt Champion

    Did you restart from a clean state ?



  • yes I checked out fresh code and working from there



  • also can you please take a look at my 2nd observation about webkit.


  • Lifetime Qt Champion

    Ruby on your host



  • I got little success, webkit is compiled now.

    But when I am trying to use it in my Qt-application.

    QT =+ webkit webkitwidget

    Project error: Unknown modules in QT: webkit webkitwidgets

    I think it is related with the version of qmake , I have 3.0 but that was supplied with Qt-5.3.1.

    So how to include webkit and wekitwidget .


  • Lifetime Qt Champion

    If you want to build a project with your cross-compiled Qt, use the corresponding qmake.



  • I think you are not getting my point. It is obvious for me to use the same qmake to build my project. If I use Qt =+ multimedia core, its working fine but the problem is with webkit,

    There are certain post about this same error but not satisfactory answer to this problem.
    so any clue on this part?
    Also when I omit webkit and create the application and try to run on the target is say

    Failed to load platform plugin xcb. I found one post by you and will go from there. http://qt-project.org/forums/viewthread/30825. Do I need xcb on host or target?

    But still not sure for webkit error.



    1. I don't have libqxcb.so library at my qt_install/plugins/platforms location.
      I have only libqlinuxfb.so . libqminimal.so and libqoffscreen.so

  • Lifetime Qt Champion

    Are you running a X11 server on your target ?



  • I am running linux-3.12 on my target. And I think the xcb requirement is for X11, can't I use the linux frame buffer to load my application?
    No idea how I can run any simple application? Please guide.


  • Lifetime Qt Champion

    Yes, the xcb plugin is used for X11

    Sure you can, tell you application which plugin to load when starting it. More info "here":http://qt-project.org/doc/qt-5/embedded-linux.html



  • ok so based on your link if I don't have X11, then I don't have to worry about XCB platform plugin. Instead I should try to enable LinuxFB.

    Shall I use QT_QPA_PLATFORM=linuxfb:fb=/dev/fb0 at the configuration time.

    And QT_QPA_GENERIC_PLUGINS=evdevkeyboard,evdevmouse,evdevtouch for the input, this is also at the configuration time.

    Am I right?


  • Lifetime Qt Champion

    At run time would be more exact


  • Lifetime Qt Champion

    At run time would be more exact



  • Hi SGaist,
    Its been while we are communicating on the issue about how to successfully build and deploy the Qt application on the Arm board but nothing is coming up fruitful. I was wondering how best you can provide the help about the Qt?

    Is it possible for you to provide some step by step guide, I also saw few of your communication with other interested people and those were left without fruitful outcome.

    say I want to build application and deploy on the board: what are the things that I have to enable in kernel config, at the Qt config level and how to deploy application and deploying the Qt frame work:

    On the board my file system is mounted through NFS, like this: bin, dev, etc, lib, proc, sbin, srv, sys, tmp, usr, var



  • Hi SGaist,
    Its been while we are communicating on the issue about how to successfully build and deploy the Qt application on the Arm board but nothing is coming up fruitful. I was wondering how best you can provide the help about the Qt?

    Is it possible for you to provide some step by step guide, I also saw few of your communication with other interested people and those were left without fruitful outcome.

    say I want to build application and deploy on the board: what are the things that I have to enable in kernel config, at the Qt config level and how to deploy application and deploying the Qt frame work:

    On the board my file system is mounted through NFS, like this: bin, dev, etc, lib, proc, sbin, srv, sys, tmp, usr, var


Log in to reply
 

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