How can I cross-compile QT 5.0?
-
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
-
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 .
-
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 sayFailed 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.
-
- I don't have libqxcb.so library at my qt_install/plugins/platforms location.
I have only libqlinuxfb.so . libqminimal.so and libqoffscreen.so
- I don't have libqxcb.so library at my qt_install/plugins/platforms location.
-
Are you running a X11 server on your target ?
-
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?
-
At run time would be more exact
-
At run time would be more exact