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!
-
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 qtmultimediathis 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 qtmultimediathis 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!
-
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.confstart 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.
-
You have to download the sources to cross-compile
-
All downloads available are on the download page
"Direct link":http://download.qt-project.org/official_releases/qt/5.1/5.1.0/single/qt-everywhere-opensource-src-5.1.0.tar.gz
-
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/libwith 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_LIBconfiguration 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.
-
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;
-
How to use configure so that qmake can be build using arm-linux-xilinx-gnueabi-g++ compiler?
-
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
-
-
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 functionqUncompress(unsigned char const*, int)': qbytearray.cpp:(.text._Z11qUncompressPKhi+0xde): undefined reference to
uncompress'
/home/work/qt-5.1.1/qtbase/lib/libQt5Bootstrap.a(qbytearray.o): In functionqCompress(unsigned char const*, int, int)': qbytearray.cpp:(.text._Z9qCompressPKhii+0xda): undefined reference to
compress2'
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 2From 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 -
Did you restart from a clean state ?
-
Ruby on your host