05/19/2011 3:24 PM
post85969
|
Attached is a simple UI using the Qt "Declarative" model. Declarative Qt programs utilize a paradigm similar to web
pages.
The tutorial includes complete instructions for building and running the the example on QNX hosted on x86.
Dennis
|
|
|
06/13/2011 7:59 AM
post86569
|
PDF version of the document
|
|
|
06/21/2011 10:35 AM
post86749
|
Hello Dennis!
Great example, thank You!
These days, I am trying to include QT to QNX.
Following the instruction sheet coming with Your example, I installed qt_qnx_host_win32_x86.tar.gz and qt_qnx_targets.
tar.gz on my windows 7-machine in the qnx650-directory (p.6, Steps 1-3). While the code example works in the QT IDE, I
always get the following error message when I try to compile the code in the qnx650 directory (p.7, Step 4).
"make: *** No rule to make target `/usr/qnx650/target/qnx6/usr/share/qt4/mkspecs/
unsupported/qws/qnx-i386-g++/qmake.conf', needed by `Makefile'. Stop."
The advice for the makefile given in the readme-file coming with qt_qnx_2011-02-24b.zip (s. Your post from 3/3/11 in
this forum) does not seem to work either:
"In file included from ../easyData.cpp:1:
../easyData.h:11:36: error: QDeclarativeListProperty: No such file or directory
make[2]: *** [easyData.o] Error 1
make[2]: Leaving directory `C:/QNX650/target/qnx6/x86/usr/lib/qt4/examples/cEasy
/nto-x86-o'
make[1]: *** [all] Error 2
make[1]: Leaving directory `C:/QNX650/target/qnx6/x86/usr/lib/qt4/examples/cEasy
/nto-x86-o'
make: *** [all] Error 2".
May I ask for Your help?
|
|
|
06/21/2011 11:19 AM
post86751
|
Simon-
If I read your post correctly, the first error...
"make: *** No rule to make target `/usr/qnx650/target/qnx6/usr/share/qt4/mkspecs/
unsupported/qws/qnx-i386-g++/qmake.conf'
...was fixed by configuring according to the readme-file coming with qt_qnx_2011-02-24b.zip ?
(You do need to configure the qt_qnx package by following its instructions.)
This changed the behavior to the second error?
"In file included from ../easyData.cpp:1:
../easyData.h:11:36: error: QDeclarativeListProperty: No such file or directory
Perhaps cEasy/Makefile was overwritten? Note the one in the cEasy package has two comments at the top with initials "
dek". You need that version of Makefile to resolve the include file issues for QtDeclarative.
Dennis
|
|
|
06/21/2011 12:15 PM
post86753
|
Hello Dennis,
thank You for the incredibly fast answer!
The replacement of Your cEasy/Makefile by the Makefile in the readme.txt brought me to the second error message. Going
further, I complemented the automatically generated makefile in the subdirectory \cEasy\nto-x86-o by hand with Your two
comments on QtDeclarative. Another call of make then yields the error message
"ntox86-g++ -Wl,-O1 -o cEasy easyData.o main.o mainwidget.o moc_easyData.o moc_ma
inwidget.o -LC:/QNX650/target/qnx6/x86/usr/lib -lQtGui -lQtCore -lQtDeclarati
ve
C:/QNX650/target/qnx6/x86/usr/lib/libQtGui.so: file not recognized: File truncat
ed
collect2: ld returned 1 exit status
make[2]: *** [cEasy] Error 1
make[2]: Leaving directory `C:/QNX650/target/qnx6/x86/usr/lib/qt4/examples/cEasy
/nto-x86-o'
make[1]: *** [all] Error 2"
So it seems to be a problem with linking to the libraries, doesn't it?
Probably, the empty links libQtCore.so.4 etc. are not properly recognized by the windows system? How can I directly
connect the relevant libraries libQtCore.so.4.7.1 etc. ?
Thank You for any effort!
sk
|
|
|
06/21/2011 12:34 PM
post86755
|
Honestly, I did not understand how to implement p.6, step 4, since I did not find the profile-file in windows nor in the
qnx650-directory.
Do well!
sk
|
|
|
06/21/2011 12:39 PM
post86757
|
It finally registered that you are trying to build on Windows! The pdf doc assumes "self-hosted". But it sounds like
you got pretty far.
>>>Probably, the empty links libQtCore.so.4 etc. are not properly recognized by the windows system?
You are correct - depending on which windows "tar" program you use, symbolic links are not always correct. If you have
zero-len *.so libraries, they are supposed to be symbolic links to the "latest" library. So the remedy on Windows is to
copy the CONTENTS of the latest library into the corresponding zero-len .so name.
>>>I did not understand how to implement p.6, step 4, since I did not find the profile-file in windows nor in the qnx650
-directory.
You could try putting them in the system environment - control panel/System - but I think you will just keep running
into more problems. You really need to install the 6.5 development CD onto a PC or into vmware!
Dennis
|
|
|
06/22/2011 8:52 AM
post86772
|
Hello Dennis,
since I was not able to copy the contents (there is no windows-program to view lib-file properly), I tried to simply
rename the libraries.version with the label of their corresponding link-library, f.ex. libQtDeclarative.so.4.7.1 to
libQtDeclarative.so.
When compiling, it produced several "undefined references". It would have been a truely elegant solution, but I finally
gave up and worked around with compiling in a virtual QNX-machine according to Your instruction sheet. There it worked
out perfectly. Now, I am going to try out different QT-samples.
Thanks a lot for Your help!
Do well!
sk
|
|
|
06/26/2011 1:36 PM
post86853
|
Hi,
I tried the example also to get it running on an IGEPv2 (ARM). I modified the makefile and created a dos application to
work around the library issue. This post contains the dos script. The next one will contain a modified Makefile to make
it build on a Win32 host.
Freddy
|
|
|
06/26/2011 1:46 PM
post86854
|
And here is the modified makefile. I noticed a few things:
Sometimes, there is a reference to QNX650/target/armle/
There is also a reference to ***arm***
There are references to **x86**
And there are references to **i386**
I had to puzzle for a while to get the makefile as given by the attachment. The QT application now builds nicely on
Windows.
I hope others can use it also.
Freddy
|
|
|
06/26/2011 1:50 PM
post86855
|
But.... solutions also introduce problems :-)
I tried to run the application on a read-only filesystem but ran into the following error message:
# Cannot create Qt for Embedded Linux data directory: /qtembedded-0
It seems that a file is created on the root of my filesystem, it there a way to redirect this file using an environment
variable?
Freddy
|
|
|
06/27/2011 5:41 AM
post86862
|
Hello,
Never stop trying harder: after some fiddling with renaming the libraries (some to the name of the symbolic link, some
to 'name of the symbolic link.4') and setting the appropriate environment variable, it worked out finally.
This is admittedly much more comfortable with your makefile, Freddy - thank You!
Replacing the /apps - directory with my paths, it compiles without any complains.
Thank You all for Your efforts!
Simon K.
|
|
|
06/27/2011 5:41 PM
post86888
|
I hope you enjoyed the makefile. I need to add some comments to it.
These are the steps I did on win32:
1) Download the sources.
2) Run the copy script to fix the shared objects issue.
3) Copied the files from the qt project to the QNX Makefile project.
4) Modified the makefile
5) Build project.
Getting there was a long way but I learned something new during the journey and that is nice also.
Good luck with the ongoing developments Simon and Thanks Dennis for providing the foundation.
Freddy
|
|
|
06/27/2011 4:29 PM
post86885
|
# Cannot create Qt for Embedded Linux data directory: /qtembedded-0
I noticed on the VMware image, /tmp/qtembedded-0 is created. Environment variable TMPDIR=/tmp is set - could that be
absent on your target?
Dennis
|
|
|
06/27/2011 5:37 PM
post86887
|
I will try that tomorrow. But I think that will help.
Thanks for the reply.
Freddy
|
|
|
06/29/2011 2:01 PM
post86948
|
He Dennis,
That seems to do the trick. I cannot use /tmp because it is '/dev/shmem'. I use a ramdrive. This is what I do:
# ls -l /tmp/cEasy
-rwxrwxrwx 2 root 0 34249 Jan 01 1980 /tmp/cEasy
export TMPDIR=/fs/ram
/tmp/cEasy -qws
After executing cEasy, the following message appears:
Qt for Embedded Linux data directory has incorrect permissions: /fs/ram/qtembedded-0
Do you have a clue what is happening?
Freddy
|
|
|
06/29/2011 9:09 PM
post86957
|
>>>data directory has incorrect permissions: /fs/ram/qtembedded-0
Sounds like /fs/ram is not formatted qnx4 or qnx6. Some filesystems don't support permissions.
Dennis
|
|
|
06/30/2011 12:02 PM
post86993
|
You're right. My /fs/ram is a FAT drive. I created a new QNX4 ramdrive and it works. Thanks for the answer.
Right now, I am able to:
1) Build the QT example on a win32 hosted development system
2) run the Qt example on an IGEPv2
Everything required is within this thread.
@Dennis: Thanks for the example and the hints.
Cheers,
Freddy
|
|
|
06/30/2011 12:06 PM
post86994
|
>>>@Dennis: Thanks for the example and the hints.
Thank you from providing the win32 build. I haven't tried it yet but
its good to have a reference!
BTW the other example (with pps) is more interesting...
-----Original Message-----
From: Freddy Martens [mailto:community-noreply@qnx.com]
Sent: Thursday, June 30, 2011 12:02 PM
To: general-qt
Subject: Re: Simple Qt UI example
You're right. My /fs/ram is a FAT drive. I created a new QNX4 ramdrive
and it works. Thanks for the answer.
Right now, I am able to:
1) Build the QT example on a win32 hosted development system
2) run the Qt example on an IGEPv2
Everything required is within this thread.
@Dennis: Thanks for the example and the hints.
Cheers,
Freddy
_______________________________________________
Qt General
http://community.qnx.com/sf/go/post86993
|
|
|
|
Re: RE: Simple Qt UI example
|
06/30/2011 6:57 PM
post87007
|
Re: RE: Simple Qt UI example
Hi Dennis,
A little offtopic...
Here is another example. Homebrewn. The problem is that the INCPATH in the Makefile needs the drive specifier 'C:' to be
able to build. Without, it starts complaining. The cEasy project you provided doesn't need this. I already checked the
project properties but I cannot find anything explaining why I need to use the 'c:' part in the INCPATH.
And yes, I will lookinto pps also, I first want to figure out which libraries are required on the target (I know, 'pidin
mem' answers the question but I want to know which of the provided libs are target libraries and which ones are used on
a development host).
Freddy
|
|
|
07/01/2011 4:04 PM
post87022
|
Freddy-
I verified your Makefile on Windows. Seemed to work well! Thanks for contributing.
FYI - It is NOT necessary to do the fixup for zero len files in '_fix_libQt_libs.cmd' IF you use the QNX tools to
untar the archive.
You can use:
C:\QNX650\host\win32\x86\usr\bin\gzip.exe -d qt_qnx_targets.tar.gz
C:\QNX650\host\win32\x86\usr\bin\tar.exe -xvf qt_qnx_targets.tar
The zero len files are symbolic links on a posix filesystem. When winzip unzips them, no file contents exist so empty
files are created. But the QNX tools are smarter - for every symbolic link, they create a "copy" of what the link
points to. Inefficient, but at least it works!
Dennis
|
|
|
07/01/2011 8:55 PM
post87025
|
Actually, the armle tree is flawed - it does not have the symbolic links at all so the _fix_libQt_libs.cmd file is
required!
Dennis
|
|
|
08/17/2011 1:15 AM
post88132
|
Hi Dennis,
I followed your example, but encountered some errors. Hope you can help me out..
My environment is self-host QNX6 using VMware
It all went on well until step 6. 5) # ./cEasy –qws
here an error message showed as:
ldd:FATAL: Could not load library libQtGui.so.4
I also attached a picture to make myself clear..
I have no idea how to handle it..coz I'm rather new to both Qt and QNX...
BTW, what does -qws mean?
Thanks in advance!
> Attached is a simple UI using the Qt "Declarative" model. Declarative Qt
> programs utilize a paradigm similar to web pages.
>
> The tutorial includes complete instructions for building and running the the
> example on QNX hosted on x86.
>
> Dennis
|
|
|
08/17/2011 4:06 AM
post88136
|
Oh! I forgot to copy the library files.. Now it works fine!
But I still have a question, why we have to use an external terminal to make the keyboard and mouse functional ?
|
|
|
08/17/2011 7:27 AM
post88141
|
Hello Zhiying,
it's a rather astonishing coincidence: just today, when trying out the example on a new QNX-machine, I ran into the same
error message.
Do You know where exactly the so-libraries have to be stored? Is it the folder /usr/lib/ or somewhere else? How did You
solve it?
Do well!
Simon K.
|
|
|
08/17/2011 7:35 AM
post88142
|
To Your question: when You call devi-hid, this process takes over the control of keyboard and mouse, so that You cannot
start the program afterwards.
I evade this problem by including the line
system("/usr/photon/bin/devi-hid -Pr kbd mouse");
in the main-function of my programs. You then do not need to call it before.
Do well!
Simon K.
|
|
|
08/17/2011 7:38 AM
post88143
|
>>>But I still have a question, why we have to use an external terminal to make the keyboard and mouse functional ?
The "cosnole" is comprised of the PC's "text-mode" screen plus keyboard. Once the PC screen mode is switched to "
graphics" mode (for Qt) the combination is broken and the console is destroyed. The keyboard and mouse (free'd from
console) can be bound to the graphics screen.
|
|
|
08/17/2011 7:55 AM
post88147
|
Hello again Dennis!
Do You know where the so-libraries have to be provided on the QNX-machine?
Is it the folder /usr/lib/ or somewhere else? Since I won't use the machine for development and regarding the small
available space, I do not want to install the whole package and rather copy exactly the libraries I need to run the
programs.
Do well!
Simon K.
|
|
|
08/17/2011 8:40 AM
post88151
|
>>>Do You know where the so-libraries have to be provided on the QNX-machine?
Libraries are located at runtime using the LD_LIBRARY_PATH environment variable
# echo $LD_LIBRARY_PATH
In the boot script for the embedded system, there is usually a lines like these...
PATH=:/proc/boot:/sbin:/bin:/usr/sbin:/usr/bin:/opt/bin
LD_LIBRARY_PATH=:/proc/boot:/lib:/usr/lib:/lib/dll:/opt/lib:/usr/lib/graphics.
You can put them in any path in the list - however, you might put them in /lib.
|
|
|
08/17/2011 9:22 AM
post88154
|
Hello Dennis!
Thank You very much for the prompt reply!
In a photon-terminal I got exactly the response You quoted, but the variable LD_LIBRARY_PATH does not seem to survive in
text mode.
However the program works perfectly now, with the Qt-libraries in /lib anyway.
So thanks again and have a day as nice as mine (from now on)!
Simon K.
|
|
|
08/17/2011 9:31 AM
post88155
|
Glad it worked. You can add LD_LIBRARY_PATH (or any other variable) to /root/.profile, i.e. "export QWS_DISPLAY=qnx"
Dennis
|
|
|
08/17/2011 8:44 PM
post88176
|
Hi Dennis & Simon,
Thank you so much for your reply, it's really helpful!!
Br & Good day!
Zhiying
|
|
|
|