Thursday, January 28, 2010

Qt Mobility for Symbian Problems & Solutions

This is mixed log of my troubleshooting attempts while developing using Qt Mobility for Symbian.
  1. Ensure WINSCW for Command Line
  2. Install Qt For Symbian
  3. Install Qt Mobility for Symbian
  4. Qt Mobility libraries:
  5. In C:\QtMobility\symbian\install_to_sdk\Qt_Mobility_tech_preview_libraries.zip
  6. Extract to C:\Symbian\9.4\S60_5th_Edition_SDK_v1.0_2
  7. Qt Mobility includes:
  8. Launch Qt for Symbian Command Prompt
  9. Make sure Perl is still in path (perl -v)

This seems wrong: "Rather than building the libraries it is also possible to deploy a prebuilt set of libraries. Under the c:\QtMobility\%DISTNAME%\symbian directory there contains Mobility_tech_preview_libraries.zip. Extract this into the SDK root directory to add the necessary libraries. If you have multiple SDKs then repeat this step for each of them."
because it only installs the binary lib files but not the header files, so we still need to at least "configure" Qt Mobility.
That should create "qcontact.h" etc. on C:\S60\devices\S60_3rd_FP2_SDK_v1.1\epoc32\include
"make" is not needed
Rebuild debug helper -- masih error
How to Build & Run:
Build configuration: using Symbian, compiler: WINSCW
Run configuration: Symbian emulator

What is WINSCW ?
WINSCW is Symbian emulator. The WINSCW compiler builds Symbian programs that can be run or debugged on the S60 Emulator.
Symbian Emulator only accepts WINSCW built programs, it cannot run apps built using GCCE, ARM9E, ARMV6.
What is CodeWarrior?
It's the former, expensive IDE for Symbian. Now replaced by Carbide.c++ which is free.
What is GCCE?
From Forum Nokia Wiki
GCCE (GNU Compiler Collection for Embedded) is an ARM-based compiler used in Symbian OS 9. Before Symbian OS 9, GCC is used to compile for the target. It is intended for building third party applications. It cannot be used to compile the full operating system.
What is RVCT-ARMV6?
It's the proprietary compiler from ARM. It is needed to compile Qt (for now), and for debugging Symbian apps using Qt Creator.
RVCT vs GCCE: http://discussion.forum.nokia.com/forum/showthread.php?t=109299
To run using Emulator:
1. Shutdown the Emulator first (make sure it's not running)
2. Then run app

Error during installation of Qt_Mobility_tech_preview.sis to Emulator:
Certificate error. Contact the application supplier.

Error during Emulator (but ignorable):
C:\Qt\4.6.1-symbian\examples\animation\animatedtiles>make run
call /S60/devices/S60_3rd_FP2_SDK_v1.1/epoc32/release/winscw/udeb/animatedtiles.
exe
Terminate batch job (Y/N)? n

Unhandled exception filter called from program C:\S60\devices\S60_3rd_FP2_SDK_v1
.1\epoc32\tools\make.exe
ExceptionCode = c0000005
ExceptionFlags = 0
ExceptionAddress = 416569
Access violation: write operation at address 428
Solution --> Set Emulator compatibility to Windows XP SP3

Error during make run:
C:\Qt\4.6.1-symbian\examples\animation\animatedtiles>make run
call /S60/devices/S60_3rd_FP2_SDK_v1.1/epoc32/release/winscw/udeb/animatedtiles.exe
C:\S60\devices\S60_3rd_FP2_SDK_v1.1\epoc32\tools\make.exe: [run] Error -1073741819 (ignored)

I got this error during Clean:
make[2]: \S60\devices\S60_3rd_FP2_SDK_v1.1\EPOC32\BUILD\Users\ceefour\Documents\qtcontest\message-merge\MESSAGE-MERGE_0XE6F7F146\WINSCW\MESSAGE-MERGE_0XE6F7F146.WINSCW: No such file or directory
make[2]: *** No rule to make target `\S60\devices\S60_3rd_FP2_SDK_v1.1\EPOC32\BUILD\Users\ceefour\Documents\qtcontest\message-merge\MESSAGE-MERGE_0XE6F7F146\WINSCW\MESSAGE-MERGE_0XE6F7F146.WINSCW'. Stop.
make[1]: *** [CLEANMESSAGE-MERGE_0XE6F7F146] Error 2

I got this error during Build (Symbian Debug):
mwldsym2.exe: Invalid object 'main.o': unknown machine (0x457f)
make[1]: Leaving directory `C:/Users/ceefour/Documents/qtcontest/message-merge'
make -r -f "\S60\devices\S60_3rd_FP2_SDK_v1.1\EPOC32\BUILD\Users\ceefour\Documents\qtcontest\message-merge\WINSCW.make" FINAL CFG=UDEB VERBOSE=-s
Errors caused tool to abort.
make[2]: *** [\S60\devices\S60_3rd_FP2_SDK_v1.1\epoc32\release\WINSCW\udeb\message_merge.exe] Error 1
make[1]: *** [TARGETMESSAGE-MERGE_0XE6F7F146] Error 2
Solution --> http://discussion.forum.nokia.com/forum/showthread.php?t=105186
1) delete all *.o files manually (for some reason "clean project" is not enough)
2) rebuild.
In my case it helped. Problem arose because I created hole project on Linux ("normal" qt) and then copied files (including *.o) to windows machine to play with Carbide.

I got this error during Run:
Starting C:\S60\devices\S60_3rd_FP2_SDK_v1.1\epoc32\release\winscw\udeb\message-merge.exe...
The process could not be started!
--> It means the file does not exist (the Build process fails)

Building Symbian Release + GCCE gives .. last words:
make -r -f "\S60\devices\S60_3rd_FP2_SDK_v1.1\EPOC32\BUILD\Users\ceefour\Documents\qtcontest\message-merge\GCCE.make" TARGET CFG=UREL VERBOSE=-s
make[1]: Entering directory `C:/Users/ceefour/Documents/qtcontest/message-merge'
make -s -C \Users\ceefour\Documents\qtcontest\message-merge -f "MAKEFILE_0XE6F7F146.MK" TO_ROOT=..\..\..\..\.. EPOCBLD=..\..\..\..\..\S60\devices\S60_3rd_FP2_SDK_v1.1\EPOC32\BUILD\Users\ceefour\Documents\qtcontest\message-merge\MAKEFILE_0XE6F7F146\GCCE TO_BLDINF=..\..\..\..\..\Users\ceefour\Documents\qtcontest\message-merge PLATFORM=GCCE CFG=UREL BLD
make -s -r -f "\S60\devices\S60_3rd_FP2_SDK_v1.1\EPOC32\BUILD\Users\ceefour\Documents\qtcontest\message-merge\MESSAGE-MERGE_0XE6F7F146\GCCE\MESSAGE-MERGE_0XE6F7F146.GCCE" UREL
main.cpp
templatesdialog.cpp
templateeditdialog.cpp
mainwizard.cpp
messagemerger.cpp
moc_templatesdialog.cpp
moc_templateeditdialog.cpp
moc_mainwizard.cpp
make[1]: Leaving directory `C:/Users/ceefour/Documents/qtcontest/message-merge'
make -r -f "\S60\devices\S60_3rd_FP2_SDK_v1.1\EPOC32\BUILD\Users\ceefour\Documents\qtcontest\message-merge\GCCE.make" FINAL CFG=UREL VERBOSE=-s
make[1]: Entering directory `C:/Users/ceefour/Documents/qtcontest/message-merge'
make -s -C \Users\ceefour\Documents\qtcontest\message-merge -f "MAKEFILE_0XE6F7F146.MK" TO_ROOT=..\..\..\..\.. EPOCBLD=..\..\..\..\..\S60\devices\S60_3rd_FP2_SDK_v1.1\EPOC32\BUILD\Users\ceefour\Documents\qtcontest\message-merge\MAKEFILE_0XE6F7F146\GCCE TO_BLDINF=..\..\..\..\..\Users\ceefour\Documents\qtcontest\message-merge PLATFORM=GCCE CFG=UREL FINAL
make[1]: Leaving directory `C:/Users/ceefour/Documents/qtcontest/message-merge'
C:\S60\devices\S60_3rd_FP2_SDK_v1.1\epoc32\tools\make.exe: Leaving directory `C:/Users/ceefour/Documents/qtcontest/message-merge'
Exited with code 0.


Prepare the Emulator with Qt :
File -> Open. Install qt_demos.sis
Error: Request application access not granted.

Qt looks awful in E71
Solution --> I was using Dark Personal, switching to Grey Steel works fine.

Build successful (Debug WINSCW), but Error during Run
Starting C:\S60\devices\S60_3rd_FP2_SDK_v1.1\epoc32\release\winscw\udeb\message-merge.exe...
The process could not be started!
Cause: Project name contains '-'. Output filename is message_merge.exe, but tried to run message-merge.exe. Seems like Symbian does not support dash in app names.
Solution: Either
Rename project using underscore "_" instead of dash "-", or
Run message_merge.exe manually

Trouble: App crashes when accessing Qt Mobility / Symbian features
Cause: SYMBIAN.CAPABILITY is not properly specified in the .pro file
See: http://discussion.forum.nokia.com/forum/showthread.php?t=158729
http://discussion.forum.nokia.com/forum/showthread.php?t=90428
After doing this, during installation, it shows dialog for ReadUserData and WriteUserData. So the capability is requested well.
But --> Problem persists! :-(

Trouble: Required application access not granted.
When installing samplephonebook.sis, E71 says "Required application access not granted."
See: http://mobile.antonypranata.com/2006/06/16/interpreting-signing-error-messages-in-s60-3rd-edition/
Hint: Check that your certificate can be used to sign all capabilities needed by your application. For example, if you use self-signed certificate, you can only sign basic set capabilities, i.e. NetworkServices, ReadUserData, WriteUserData, LocalServices and UserEnvironment. If your application requires one of the extended capabilities, for example SwEvent, you cannot sign it with self-signed certificate. In this case, apply for developer certificates from Symbian Signed.

Is Carbide.c++ needed?
If Qt Creator comes with the Nokia C/C++ compiler (WINSCW) then yes, you can ignore Carbide.c++ completely. Of if you don't plan to do any emulator builds ...

Compilation Error release-gcce
Doing make release-gcce on writemessage QtMobility example throws this error:

make -r -f "\S60\devices\S60_3rd_FP2_SDK_v1.1\EPOC32\BUILD\QtMobility\examples\writemessage\GCCE.make" FINAL CFG=UREL VERBOSE=-s

make[2]: *** No rule to make target `\S60\devices\S60_3rd_FP2_SDK_v1.1\epoc32\release\ARMV5\LIB\QtMessaging_tp.dso', needed by `\S60\devices\S60_3rd_FP2_SDK_v1.1\epoc32\release\GCCE\urel\writemessage.exe'. Stop.

make[1]: *** [TARGETWRITEMESSAGE_0XE6E34AD4] Error 2

make[1]: Entering directory `C:/QtMobility/examples/writemessage'

make -s -C \QtMobility\examples\writemessage -f "MAKEFILE_0XE6E34AD4.MK" TO_ROOT=..\..\.. EPOCBLD=..\..\..\S60\devices\S60_3rd_FP2_SDK_v1.1\EPOC32\BUILD\QtMobility\examples\writemessage\MAKEFILE_0XE6E34AD4\GCCE TO_BLDINF=..\..\..\QtMobility\examples\writemessage PLATFORM=GCCE CFG=UREL FINAL

make[1]: Leaving directory `C:/QtMobility/examples/writemessage'

C:\S60\devices\S60_3rd_FP2_SDK_v1.1\epoc32\tools\make.exe: Leaving directory `C:/QtMobility/examples/writemessage'

Exited with code 0.



Running "make sis" also errors, which means the above build was unsuccessful, even though "exit code 0" :

C:\QtMobility\examples\writemessage>make sis
make -s -f Makefile ok_sis
Processing writemessage_release-gcce.pkg...
 Error : Cannot find file : /S60/devices/S60_3rd_FP2_SDK_v1.1/epoc32/release/gcce/urel/writemessage.exe

writemessage_release-gcce.pkg(28) : error: file I/O fault.
file I/O fault, cannot open writemessage_release-gcce_unsigned.sis.

SIS creation failed!
Solution --> Unpack the QtMobility for Symbian SDK binaries.

WINSCW Debug, Build Success, Error during Run:
Starting C:\S60\devices\S60_3rd_FP2_SDK_v1.1\epoc32\release\winscw\udeb\contactsgo.exe...
C:\S60\devices\S60_3rd_FP2_SDK_v1.1\epoc32\release\winscw\udeb\contactsgo.exe exited with code -1073741819
Solution --> Close already running Emulator.

Qt Mobility Contacts when accessing a QContact object crashes on E71, but runs well on emulator
Seems like something to do with "weird" contacts. On my E71, the first two contacts (Groups) are just fine.
I think my Contact LocalId 1460 is somewhat corrupted or has data that Qt Mobility Contacts Symbian cannot cope with. :-(

WINSCW Debug, Build Success, Error During Run:
Starting C:\S60\devices\S60_3rd_FP2_SDK_v1.1\epoc32\release\winscw\udeb\contactsgo.exe...
C:\S60\devices\S60_3rd_FP2_SDK_v1.1\epoc32\release\winscw\udeb\contactsgo.exe exited with code 100
Solution --> Connect to a network, at least loopback. Or just try again.

How to know if WINSCW Debug Qt Mobility Contacts app is good:
Starting C:\S60\devices\S60_3rd_FP2_SDK_v1.1\epoc32\release\winscw\udeb\contactsgo.exe...
Plugin paths: ("C:/Private/e6fe6e03", "C:/resource/qt/plugins", "C:/Private/e6fe6e03")
Looking for plugins in "C:/resource/qt/plugins/contacts" ("mobapicontactspluginsymbian.qtplugin")
Dynamic: found an engine plugin 0x3d9e3828 with name "symbian"
Found engines: ("symbian[]")
Found actions: ()
C:\S60\devices\S60_3rd_FP2_SDK_v1.1\epoc32\release\winscw\udeb\contactsgo.exe exited with code 0

Qt Mobility Contact doesn't run at all on E71, but runs well on emulator
This runs:
    QList<QContactLocalId> contactIds = cm.contacts();
This doesn't:
    QContactFilter filter;
    QList<QContactLocalId> contactIds = cm.contacts(filter);

Can't build Qt Contacts app WINSCW Debug:
make[2]: *** No rule to make target `\S60\devices\S60_3rd_FP2_SDK_v1.1\epoc32\release\WINSCW\udeb\QtContacts.lib', needed by `\S60\devices\S60_3rd_FP2_SDK_v1.1\epoc32\release\WINSCW\udeb\messagemerge.exe'. Stop.
make[1]: *** [TARGETMESSAGE-MERGE_0XEA138C70] Error 2
But --> QtContacts_tp.lib exists !!!
Cause --> Mismatch between Qt Mobility binaries on S60 SDK and the Qt Mobility header files.
Solution -->  Make sure use the exact same Qt Mobility version installed in the S60 SDK and the header files used for development.

4 comments:

  1. I'm too am trying to use Qt for Symbian and am also running into what I'm now calling "Symbian Install Hell". You know, like DLL Hell in Windows. I really just want to say WTF?, but let's give the creators the benefit of the doubt. It seems to me that since Qt for Symbian is really a 1.0 release a plethora of kinks have yet to be ironed out. It may not be ready for prime time S60 development and might be best to stick with Carbide.c++ until the installation issues get ironed out.

    ReplyDelete
  2. Hi Anonymous,

    I can't disagree with you.

    A lot of my difficulties mostly come from Qt Mobility, then Qt *AND* Symbian.

    Qt development in itself is quite fun and rewarding.

    I've never done "pure" Symbian development, but from what I heard it's quite a hell.

    Qt for Symbian aims to relieve some part of that, but it still brings Symbian's "evilness" in part. Qt for Symbian's immaturity also brings a few problems on its own.

    Symbian's quirks also make it less easy to develop apps the Qt way.. like the exception handling.

    ReplyDelete
  3. I got error during installation of Qt_mobility_tech_preview.sis to device:
    Certificate error. Contact the application supplier.
    What's the solution then?

    ReplyDelete
  4. Thanks for those mobility tips. What would you say is the best solution? THANKS

    ReplyDelete

Be the first to comment!