How to run QT application on X-window of the embedded platform
-
Hi, I have an urgent problem with QT run the embedded platform:
I have an embedded EVM-Board, which runs Ubuntu with X-window desktop. The system runs like a PC linking monitor, keyboard and mouse.Now I want to run a QT application on X-window of the embedded system. After I downloaded QT-lib and QT-application to the file-system and run the QT-application on the terminal, the application could run and the printf-info had no problem. However, there was no QT-window to display on the monitor.
I guess there is someting wrong with my compliled QT-lib or lack of some QT-tools。
Please tell me where is my problem, and whether X-window system needs QVFB to run QT application (no matter on X86 or embedded platform)?
My enviorment:
hardware platform: TI DM8148(ARM+DSP)
complile system: Ubuntu 11.04
complie tool:linux-arm-gnueabi-g++
embedded system : Ubuntu 11.04
QT opensource:qt-everywhere-opensource-src-4.8.1.tar.gzmy install QT-lib configure:
./configure -prefix /usr/local/Trolltech/Qt-4.8.1 -arm -xplatform qws/linux-arm-gnueabi-g++ -embedded arm -little-endian -release -opensource -fast -no-accessibility -scripttools -svg -webkit -shared -javascript-jit -qt-sql-sqlite -no-qt3support -no-mmx -no-3dnow -no-sse -no-sse2 -silent -qt-libpng -qt-libjpeg -qt-libtiff -make libs -nomake examples -nomake docs -nomake demo -no-nis -no-cups -no-iconv -no-dbus -qt-freetype -armfpa -qt-gfx-linuxfb -qt-gfx-transformed -qt-gfx-multiscreen -no-gfx-vnc -no-gfx-qvfb -qt-kbd-linuxinput -qt-mouse-linuxinput -no-glibboard export:
export QTDIR=/home/qt
export LD_LIBRARY_PATH=/lib/qt-lib
export QT_QWS_FONTDIR=/lib/qt-lib/fonts
export QWS_DISPLAY=“LinuxFb:/dev/fb0” -
Hello.
Your Qt-lib is compiled for embedded Linux (it writes directly to Linux framebuffer, eliminating the need for the X Window System). Don't use "-embedded" option. You should build Qt for X11 to run Qt GUI applications over X-window system. Check installation guide: http://qt-project.org/doc/qt-4.8/install-x11.html . In this sense your system is not embedded.
QVFB can be used for development and debugging purposes when you writing applications that works without X11: http://doc.qt.nokia.com/4.7-snapshot/qvfb.html . -
Thank for you help very much.
From what you said, is my Ubuntu system not embedded, even if the system is based on ARM-platform? If it is true, how to configure these parameters : -arm -xplatform qws/linux-arm-gnueabi-g++ -qt-gfx-linuxfb -qt-gfx-transformed -qt-gfx-multiscreen -no-gfx-vnc -no-gfx-qvfb -qt-kbd-linuxinput -qt-mouse-linuxinput ? Because my QT-application will run the ARM-platform, I think these parameters are needed, at least,QT-lib will be compiled using qws/linux-arm-gnueabi-g++.
By the way, I have a little confuse with the question: in this sense, whether I need compile QVFB to run QT application on my system(ARM+Ubuntu+X-window)?
Sorry for my bad English. If you understand what I said, please give me some help again.
-
bq. By the way, I have a little confuse with the question: in this sense, whether I need compile QVFB to run QT application on my system(ARM+Ubuntu+X-window)?
No, you don't need it.
bq. From what you said, is my Ubuntu system not embedded, even if the system is based on ARM-platform? If it is true, how to configure these parameters : -arm -xplatform qws/linux-arm-gnueabi-g++ -qt-gfx-linuxfb -qt-gfx-transformed -qt-gfx-multiscreen -no-gfx-vnc -no-gfx-qvfb -qt-kbd-linuxinput -qt-mouse-linuxinput ?
"-no-gfx-vnc", "-no-gfx-qvfb" - it's default options, just miss it.
"-qt-gfx-linuxfb", "-qt-gfx-transformed", "-qt-gfx-multiscreen", "-qt-kbd-linuxinput", "-qt-mouse-linuxinput" - it's screen, keyboard and mouse handling options. Miss it and use default values because X11 system manages this things.
If you compiling Qt on you Ubuntu(arm), try to use default "./configure" options. It will automatically detect your processor type. If you use cross-compilation then you should specify target platform as "linux-arm-gnueabi-g++" (not qws), check "./configure --help".
-
Thanks for you help me again.
Now I am more clearer to my question. I will cross-compile QT-lib and QT-application on my X86-computer, and I will download the compiled QT-lib and QT-application on my EVM-board((ARM+Ubuntu+X-window)) to run. So I need using my cross-compilation(linux-arm-gnueabi-g++) to cross-compile.
one question i want to make sure:
[quote author="Serg" date="1337013285"]bq. you should specify target platform as “linux-arm-gnueabi-g++” (not qws),[/quote]
what does this sentence mean? do you mean configure like this:"./configure -xplatform qws/linux-arm-gnueabi-g++". Especially, what does *''(not qws)" *mean?Or you can tell me more details to "./configure", yeah i have check “./configure —help”.
Thank you so much for your warm-heart!!! -
-xplatform used with -embedded only, you should use -platform.
I'm not sure, but I think it will be correct: "./confugure -platform arm-none-linux-gnueabi-g++". Also you should correctly configure environment variables (e.g. CC, LD, etc.) on your host system for cross-compilation (check cross-compiler documentation).
-
Yesterday I tried to compile QT-LIB following what you said. However, when I compiling the qt-everywhere-opensource-src-4.8.1, there is a error :
/home/xushaofan/qt_4.8.1_pkg/qt-x11-opensource-src-4.8.1/bin/qmake: 1: Syntax error: word unexpected (expecting ")")
/home/xushaofan/qt_4.8.1_pkg/qt-x11-opensource-src-4.8.1/bin/qmake: 1: Syntax error: word unexpected (expecting ")")
/home/xushaofan/qt_4.8.1_pkg/qt-x11-opensource-src-4.8.1/bin/qmake: 1: Syntax error: word unexpected (expecting ")")
/home/xushaofan/qt_4.8.1_pkg/qt-x11-opensource-src-4.8.1/bin/qmake: 1: Syntax error: word unexpected (expecting ")")
/home/xushaofan/qt_4.8.1_pkg/qt-x11-opensource-src-4.8.1/bin/qmake: 1: Syntax error: word unexpected (expecting ")")
/home/xushaofan/qt_4.8.1_pkg/qt-x11-opensource-src-4.8.1/bin/qmake: 1: Syntax error: word unexpected (expecting ")")
/home/xushaofan/qt_4.8.1_pkg/qt-x11-opensource-src-4.8.1/bin/qmake: 1: Syntax error: word unexpected (expecting ")")
/home/xushaofan/qt_4.8.1_pkg/qt-x11-opensource-src-4.8.1/bin/qmake: 1: Syntax error: word unexpected (expecting ")")
/home/xushaofan/qt_4.8.1_pkg/qt-x11-opensource-src-4.8.1/bin/qmake: 1: Syntax error: word unexpected (expecting ")")
/home/xushaofan/qt_4.8.1_pkg/qt-x11-opensource-src-4.8.1/bin/qmake: 1: Syntax error: word unexpected (expecting ")")
/home/xushaofan/qt_4.8.1_pkg/qt-x11-opensource-src-4.8.1/bin/qmake: 1: Syntax error: word unexpected (expecting ")")
/home/xushaofan/qt_4.8.1_pkg/qt-x11-opensource-src-4.8.1/bin/qmake: 1: Syntax error: word unexpected (expecting ")")
/home/xushaofan/qt_4.8.1_pkg/qt-x11-opensource-src-4.8.1/bin/qmake: 1: Syntax error: word unexpected (expecting ")")
/home/xushaofan/qt_4.8.1_pkg/qt-x11-opensource-src-4.8.1/bin/qmake: 1: Syntax error: word unexpected (expecting ")")My configure is "./confugure -platform arm-none-linux-gnueabi-g++" as you told me , and I think I configure environment variables correctly.
Can you tell me where someting wrong is? Thank you very much. -
Sorry to reply later beacause I was busy for other things these days.
[quote author="Serg" date="1337231425"]You should use qmake for target platform (that runs on x86, but produces output for arm), not native qmake.[/quote]
I think "qmake" is a tool used for generating Makefile, so it runs on x86, and produces output(Makefile) for X86 not for arm. Is that true?
By the way, I find an other way to get qt-lib for X11 based arm. I link the system with internet, and use “apt-get instal libqt4-dev”, then the ubuntu can download qt-lib for arm. However, when I run a QT test-program(compiled linking downloaded QT-lib) on my system, the program can output a window, but have an error:"undefined symbol: _ZN7QWidget8qwsEventEP8QWSEvent". Can you tell me what wrong about this way to get QT-lib and run QT-program.
Thanks for your warm-heart again!!!
-
bq. I think “qmake” is a tool used for generating Makefile, so it runs on x86, and produces output(Makefile) for X86 not for arm. Is that true?
The qmake tool requires a platform and compiler specific qmake.conf file describing the various default values, to generate the appropriate Makefiles. You should use correct qmake.conf file.
bq. However, when I run a QT test-program(compiled linking downloaded QT-lib) on my system, the program can output a window, but have an error:“undefined symbol: _ZN7QWidget8qwsEventEP8QWSEvent”. Can you tell me what wrong about this way to get QT-lib and run QT-program.
Looks like your program uses QWidget::qwsEvent(), that is not available in non-embedded linux environments. "Check this thread":http://qt-project.org/forums/viewthread/3043 .
-
The first question.
When I use "./configure -xplatform linux-arm-gnueabi-g++ "to configure, there is no error about "/home/xushaofan/qt_4.8.1_pkg/qt-x11-opensource-src-4.8.1/bin/qmake: 1: Syntax error: word unexpected (expecting “)”)", but it generate an error:"Basic XLib functionality test failed!
You might need to modify the include and library search paths by editing
QMAKE_INCDIR_X11 and QMAKE_LIBDIR_X11 in /home/xushaofan/qt_4.8.1_pkg/qt-everywhere-opensource-src-4.8.1/mkspecs/linux-arm-gnueabi-g++."I find the variables of QMAKE_INCDIR_X11 and QMAKE_LIBDIR_X11 is in the /mkspecs/common/linux.conf, and I change the variables to XLib's path, but this error remain.
How to solve this problem?
-
qt-everywhere-opensource-src-x.y.z/mkspecs directory used for (cross) compiling Qt for various targets.
qt-everywhere-opensource-src-x.y.z/mkspecs/qws directory used for (cross) compiling Qt embedded for various targets.So, I checked "mkspecs directory":http://qt.gitorious.org/qt/qt/trees/4.8/mkspecs and found a mistake.
bq. I’m not sure, but I think it will be correct: “./configure -platform arm-none-linux-gnueabi-g++”.
Correct is: "./configure -platform linux-arm-gnueabi-g++".
-
Correct is: “./configure -platform linux-arm-gnueabi-g++”.
But in /mkspecs directory, there is no folder of "linux-arm-gnueabi-g++",and my qt opensource's version is 4.8.1. So I just copied /mkspecs/qws/linux-arm-gnueabi-g++ to /mkspecs. I think what I did is not true, but I dont know how to get linux-arm-gnueabi-g++ in /mkspecs.
-
About second question.
Your qt test program was built on arm system as a native program? Can you show ldd output?bq. But in /mkspecs directory, there is no folder of “linux-arm-gnueabi-g++”,and my qt opensource’s version is 4.8.1. So I just copied /mkspecs/qws/linux-arm-gnueabi-g++ to /mkspecs. I think what I did is not true, but I dont know how to get linux-arm-gnueabi-g++ in /mkspecs.
Copy it from qt.gitorious, Are you checked the link "mkspecs directory":http://qt.gitorious.org/qt/qt/trees/4.8/mkspecs ?
-
My cross compiler is arm-none-linux-gnueabi-g++ not linux-arm-gnueabi-g++.
I copy the folder of linux-arm-gnueabi-g++ from qt.gitorious to /mkspecs, and I replace "linux-arm-gnueabi-g++" for "arm-none-linux-gnueabi-g++ ". Then I configure "./configure -platform linux-arm-gnueabi-g++",there is two errors:
/home/xushaofan/qt_4.8.1_pkg/qt-everywhere-opensource-src-4.8.1/bin/qmake: 1: Syntax error: word unexpected (expecting ")")
/home/xushaofan/qt_4.8.1_pkg/qt-everywhere-opensource-src-4.8.1/bin/qmake: 1: Syntax error: word unexpected (expecting ")")
/home/xushaofan/qt_4.8.1_pkg/qt-everywhere-opensource-src-4.8.1/bin/qmake: 1: Syntax error: word unexpected (expecting ")")
/home/xushaofan/qt_4.8.1_pkg/qt-everywhere-opensource-src-4.8.1/bin/qmake: 1: Syntax error: word unexpected (expecting ")")
/home/xushaofan/qt_4.8.1_pkg/qt-everywhere-opensource-src-4.8.1/bin/qmake: 1: Syntax error: word unexpected (expecting ")")
/home/xushaofan/qt_4.8.1_pkg/qt-everywhere-opensource-src-4.8.1/bin/qmake: 1: Syntax error: word unexpected (expecting ")")
/home/xushaofan/qt_4.8.1_pkg/qt-everywhere-opensource-src-4.8.1/bin/qmake: 1: Syntax error: word unexpected (expecting ")")
/home/xushaofan/qt_4.8.1_pkg/qt-everywhere-opensource-src-4.8.1/bin/qmake: 1: Syntax error: word unexpected (expecting ")")
/home/xushaofan/qt_4.8.1_pkg/qt-everywhere-opensource-src-4.8.1/bin/qmake: 1: Syntax error: word unexpected (expecting ")")
/home/xushaofan/qt_4.8.1_pkg/qt-everywhere-opensource-src-4.8.1/bin/qmake: 1: Syntax error: word unexpected (expecting ")")
/home/xushaofan/qt_4.8.1_pkg/qt-everywhere-opensource-src-4.8.1/bin/qmake: 1: Syntax error: word unexpected (expecting ")")
/home/xushaofan/qt_4.8.1_pkg/qt-everywhere-opensource-src-4.8.1/bin/qmake: 1: Syntax error: word unexpected (expecting ")")
/home/xushaofan/qt_4.8.1_pkg/qt-everywhere-opensource-src-4.8.1/bin/qmake: 1: Syntax error: word unexpected (expecting ")")
/home/xushaofan/qt_4.8.1_pkg/qt-everywhere-opensource-src-4.8.1/bin/qmake: 1: Syntax error: word unexpected (expecting ")")
/home/xushaofan/qt_4.8.1_pkg/qt-everywhere-opensource-src-4.8.1/bin/qmake: 1: Syntax error: word unexpected (expecting ")")
/home/xushaofan/qt_4.8.1_pkg/qt-everywhere-opensource-src-4.8.1/bin/qmake: 1: Syntax error: word unexpected (expecting ")")
/home/xushaofan/qt_4.8.1_pkg/qt-everywhere-opensource-src-4.8.1/bin/qmake: 1: Syntax error: word unexpected (expecting ")")
/home/xushaofan/qt_4.8.1_pkg/qt-everywhere-opensource-src-4.8.1/bin/qmake: 1: Syntax error: word unexpected (expecting ")")
/home/xushaofan/qt_4.8.1_pkg/qt-everywhere-opensource-src-4.8.1/bin/qmake: 1: Syntax error: word unexpected (expecting ")")
/home/xushaofan/qt_4.8.1_pkg/qt-everywhere-opensource-src-4.8.1/bin/qmake: 1: Syntax error: word unexpected (expecting ")")
/home/xushaofan/qt_4.8.1_pkg/qt-everywhere-opensource-src-4.8.1/bin/qmake: 1: Syntax error: word unexpected (expecting ")")
/home/xushaofan/qt_4.8.1_pkg/qt-everywhere-opensource-src-4.8.1/bin/qmake: 1: Syntax error: word unexpected (expecting ")")
/home/xushaofan/qt_4.8.1_pkg/qt-everywhere-opensource-src-4.8.1/bin/qmake: 1: Syntax error: word unexpected (expecting ")")
/home/xushaofan/qt_4.8.1_pkg/qt-everywhere-opensource-src-4.8.1/bin/qmake: 1: Syntax error: word unexpected (expecting ")")
/home/xushaofan/qt_4.8.1_pkg/qt-everywhere-opensource-src-4.8.1/bin/qmake: 1: Syntax error: word unexpected (expecting ")")
/home/xushaofan/qt_4.8.1_pkg/qt-everywhere-opensource-src-4.8.1/bin/qmake: 1: Syntax error: word unexpected (expecting ")")
/home/xushaofan/qt_4.8.1_pkg/qt-everywhere-opensource-src-4.8.1/bin/qmake: 1: Syntax error: word unexpected (expecting ")")
/home/xushaofan/qt_4.8.1_pkg/qt-everywhere-opensource-src-4.8.1/bin/qmake: 1: Syntax error: word unexpected (expecting ")")
/home/xushaofan/qt_4.8.1_pkg/qt-everywhere-opensource-src-4.8.1/bin/qmake: 1: Syntax error: word unexpected (expecting ")")
/home/xushaofan/qt_4.8.1_pkg/qt-everywhere-opensource-src-4.8.1/bin/qmake: 1: Syntax error: word unexpected (expecting ")")
/home/xushaofan/qt_4.8.1_pkg/qt-everywhere-opensource-src-4.8.1/bin/qmake: 1: Syntax error: word unexpected (expecting ")")
/home/xushaofan/qt_4.8.1_pkg/qt-everywhere-opensource-src-4.8.1/bin/qmake: 1: Syntax error: word unexpected (expecting ")")
/home/xushaofan/qt_4.8.1_pkg/qt-everywhere-opensource-src-4.8.1/bin/qmake: 1: Syntax error: word unexpected (expecting ")")
/home/xushaofan/qt_4.8.1_pkg/qt-everywhere-opensource-src-4.8.1/bin/qmake: 1: Syntax error: word unexpected (expecting ")")
/home/xushaofan/qt_4.8.1_pkg/qt-everywhere-opensource-src-4.8.1/bin/qmake: 1: Syntax error: word unexpected (expecting ")")
/home/xushaofan/qt_4.8.1_pkg/qt-everywhere-opensource-src-4.8.1/bin/qmake: 1: Syntax error: word unexpected (expecting ")")
/home/xushaofan/qt_4.8.1_pkg/qt-everywhere-opensource-src-4.8.1/bin/qmake: 1: Syntax error: word unexpected (expecting ")")
Basic XLib functionality test failed!
You might need to modify the include and library search paths by editing
QMAKE_INCDIR_X11 and QMAKE_LIBDIR_X11 in /home/xushaofan/qt_4.8.1_pkg/qt-everywhere-opensource-src-4.8.1/mkspecs/linux-arm-gnueabi-g++.But if I configure "./configure -xplatform linux-arm-gnueabi-g++" after clean configure, there just an error:
Basic XLib functionality test failed!
You might need to modify the include and library search paths by editing
QMAKE_INCDIR_X11 and QMAKE_LIBDIR_X11 in /home/xushaofan/qt_4.8.1_pkg/qt-everywhere-opensource-src-4.8.1/mkspecs/linux-arm-gnueabi-g++. -
So, there are two ways:
- Write your own mkspec for arm-none-linux-gnueabi-g++ compiler (or find in google). Then ./configure -arch arm -xplatform arm-none-linux-gnueabi-g++;
- "sudo apt-get install g++-arm-linux-gnueabi" and try to use mkspec from qt.gitorius. Then ./configure -arch arm -xplatform linux-arm-gnueabi-g++.
bq. Basic XLib functionality test failed! You might need to modify the include and library search paths by editing QMAKE_INCDIR_X11 and QMAKE_LIBDIR_X11
You need to specify X11 include files and libraries, arm libs!
-
You need to specify X11 include files and libraries, arm libs!
================================
I have specified X11 include files and libraries(for arm)' path by modifing linux.conf in /mkspecs/common, but the error remain. Is it right?
It is too later tonight, I will compile QT-lib following what you said tomorrow.
Anyway, thank you help me again and again. -
bq. I have specified X11 include files and libraries(for arm)’ path by modifing linux.conf in /mkspecs/common, but the error remain. Is it right?
I'm think it's right.
This error can be when libXext is missed.
Here is "Qt for X11 requirements":http://qt-project.org/doc/qt-4.8/requirements-x11.html. Ensure that you have all required libs.