Installing Qt for Symbian SDK 4.6.1 on Linux

***For Qt 4.6.2 and S60 3.1 SDK support, be sure to read the updated post***

Update (2010-01-27): New version of Qt installer (v2).

Qt 4.6.1 was released last Tuesday, so I took some time to update my Linux support patches for Qt (which are now merged in qt-s60 tree and hopefully will be in main Qt tree at some point) and GnuPoc (which, thanks to Martin, are now integrated into the latest release).

I had a couple of previous posts detailing instructions on how to install the SDK on Linux, but after some time, it became too boring to run those commands manually, and some people asked for a script. So, from now on, I will provide two installers to make the process much more automated and simple: one installer for GnuPoc + Open C/C++ plugin, and another for the Qt for Symbian SDK.

Note that currently the GnuPoc installer handles only the S60 5.0 SDK. If someone is interested on a 3.1 SDK installer let me know so I can add support for it too.

Preparation

Download all required files to a single directory (e.g. “~/downloads”):

For building the native tools from gnupoc, you will need:

  • the GCC C/C++ compilers
  • development files for zlib
  • development files for openssl

On Ubuntu, you can install these using the following command:

sudo apt-get install build-essential zlib1g-dev libssl-dev

Installation

First, install GnuPoc + S60 5.0 SDK + the Open C/C++ plugin:

./gnupoc_1.15_S60_5.0_installer_v1.sh \
    <download-dir> \
    <gnupoc-dir>

Replace <download-dir> with the location of all files downloaded in previous section (e.g. “~/downloads”), and <gnupoc-dir> with the destination directory for GnuPoc and the SDK files (e.g. “~/gnupoc”). Note that both directories must have absolute paths.

If installation was successful, you should see an output like:

Installation has finished. Before using the GnuPoc SDK, run these commands on the console:
 
export PATH=<gnupoc-dir>/bin:$PATH
export EPOCROOT=<gnupoc-dir>/symbian-sdks/5.0/ # trailing "/" is required!
 
(These commands must be run again every time a new console is opened.)

Run the commands as instructed on the message. Next, install Qt for Symbian:

./qt_for_symbian_4.6.1_linux_installer_v2.sh \
    <download-dir> \
    <qt-s60-dir>

Replace <download-dir> with the location of all files downloaded in previous section (e.g. “~/downloads”), and <qt-s60-dir> with the destination directory for the Qt files (e.g. “~/gnupoc/qt-4.6.1”). Note that both directories must have absolute paths.

If installation was successful, you should see an output like:
Installation has finished. Before using the Qt for Symbian SDK, run this command on the console:
 
export PATH=<qt-s60-dir>/bin:$PATH
 
(This command must be run again every time a new console is opened.)

Before using Qt for Symbian, you should run the command as instructed on the message above.

Usage example

To test the installation, I will describe how to build the “colliding mice” example.

  1. cd into the example source:
  2. cd <qt-s60-dir>/examples/graphicsview/collidingmice/

  3. Open collidingmice.pro and replace these two lines:
  4.     TARGET.UID3 = 0xA000A643
        include($$QT_SOURCE_TREE/examples/symbianpkgrules.pri)

    with:
        TARGET.UID3 = 0xE000A643
    In other words: replace the UID3 “0xA000A643” with “0xE000A643” and remove (or comment out) the “include(…)” line. This will allow to sign the built SIS file using a self-signed certificate, otherwise you would need a R&D certificate.

  5. Now build the example and generate the SIS file
  6. qmake
    make debug-gcce
    make sis

A few notes:

  • Only the “debug-gcce” (if you are using the GCCE toolchain AKA “CodeSourcery toolchain”) or “debug-armv5” (if you are using RVCT) will work, because the 4.6.1 release only ships debug versions of the libraries
  • Make sure you do similar changes as described above if you want to try compiling other Qt examples. Otherwise, you will receive errors like “Unable to install” while trying to install the SIS file on the phone.

About lizardo

My hobby: figure out how systems are expected to work; induce them to work unexpectedly; and responsibly disclose.
This entry was posted in Linux and tagged , , , . Bookmark the permalink.

45 Responses to Installing Qt for Symbian SDK 4.6.1 on Linux

  1. Pingback: Installing Qt for Symbian on Linux « Anderson Lizardo's Blog

  2. Wolfgang says:

    Hey!

    Nice installer! Very easy to handle.

    But I’ve got a few problems.
    1. Just following your instructions and building the example, everything works fine but make sis doesn’t create a .sis file!
    2. There is no webkit and ssl support, too!
    configure output looks like:
    “Building on: linux-g++
    Building for: symbian-abld
    Architecture: symbian

    Build …………… libs examples demos docs translations
    Configuration ……. cross_compile debug shared dll stl minimal-config small-config medium-config large-config full-config accessibility png freetype zlib s60 xmlpatterns multimedia audio-backend svg script scripttools debug private_tests
    Debug …………… yes
    Qt 3 compatibility .. no
    QtDBus module ……. no
    QtConcurrent code…. yes
    QtScript module ….. yes
    QtScriptTools module yes
    QtXmlPatterns module yes
    Phonon module ……. auto
    Multimedia module … yes
    SVG module ………. yes
    WebKit module ……. no
    Declarative module .. no
    Support for S60 ….. yes
    STL support ……… yes
    PCH support ……… no
    MMX/3DNOW/SSE/SSE2.. no/no/no/no
    Graphics System ….. default
    IPv6 support …….. no
    IPv6 ifname support . no
    getaddrinfo support . no
    getifaddrs support .. no
    Accessibility ……. yes
    NIS support ……… no
    CUPS support …….. no
    Iconv support ……. no
    Glib support …….. auto
    GStreamer support … auto
    Large File support .. no
    GIF support ……… plugin
    TIFF support …….. plugin (qt)
    JPEG support …….. plugin (qt)
    PNG support ……… yes (qt)
    MNG support ……… plugin (qt)
    zlib support …….. yes
    Session management .. auto
    OpenGL support …… no
    OpenVG support …… no
    SQLite support …… plugin (qt)
    OpenSSL support ….. no
    alsa support …….. no”
    Maybe the problem is Im using Fedora instead of Ubuntu/Debian and the pathes are different?
    I tried to compile my own project which uses SSL and i got a lot of errors.
    Forcing configure to use with -openssl ended up with:
    “OpenSSL support cannot be enabled due to functionality tests!”

    The old Qt 4.6.0 RC1 version worked much better! I’ll leave my tutorial about using “Qt for Symbian with Eclipse” with your old post till this is fixed.

    Maybe you can do something about these “bugs”?

    Thanks a lot!
    Regards
    Wolfgang

  3. lizardo says:

    1. What “make sis” returns for you? Here I get:

    $ make sis
    make -s -f Makefile ok_sis
    Processing collidingmice_debug-gcce.pkg…
    Created collidingmice_debug-gcce_unsigned.sis

    Successfully created collidingmice_debug-gcce.sis using certificate: Self Signed!

    And then it creates a “collidingmice_debug-gcce.sis” file on the current directory.

    2. Could you please post which errors you are getting (preferibly pasted on something line http://pastebin.com) ?

    If you have some (public) example code which shows the problem, let me know so I can test the fixes. Otherwise, I’m unable to reproduce the problem and fix it😦

    Thanks for your comments!

    • Wolfgang says:

      1. Dont know what I changed but now “make sis” is working with the example app.
      Sorry!
      2. Installing Qt for Symbian using your installer produces a lot warnings and furthermore you can see the wrong configuration, where webkit and ssl support are missing.
      Here is what I did:
      http://pastebin.com/d65879fea
      I tried to capture as much warnings as possible, but I think its only one error which makes all these warnings coming up.

      Having Qt installed I try to compile my project and here is the error log:
      http://pastebin.com/m3f9e3187
      At the moment I dont have an example code, but I think any Qt code using QSsl Libraries will raise these error messages.
      I bet the errors refering to QSsl* will vanish if I install Qt with SSL Support.

      Hope this helps!

    • nop says:

      Hello, it looks like I have similar problem on ubuntu 9.10 with creating sis file:

      $ make sis
      make -s -f Makefile ok_sis
      Processing collidingmice_debug-gcce.pkg…
      collidingmice_debug-gcce.pkg(28) : error: file not found
      collidingmice_debug-gcce_unsigned.sis: No such file or directory

      SIS creation failed!

      • Wolfgang says:

        This normally happens if there was a error during the build.

        Have a look at your “make debug-gcce” output and search for errors.

  4. Mats Rauhala says:

    I hope I’m not the only one but I’d be interested with 3.1 installer🙂

  5. paulo.rdbm says:

    Thanks a loooot!!!

  6. A happy linux user says:

    I just tested your tools with a 64bits linux machine, and it’s working very good!!!

    Thanks!!! and “Chapeau” as they say in France…

  7. Ademar says:

    What’s the changelog for the installer v2? Should I care about it if the previous installation is working fine?

    • lizardo says:

      The technical changes on v2 are:

      * instead of running ./configure again and overwriting the already created qconfig.pri, .qmake.cache, etc., build just the missing tools (qmake, rcc, uic etc.).
      * Add a portability fix to syncqt when running on headers with DOS format

      If v1 is working for you, you don’t really need to update. But keep in mind that some modules will not work (e.g. QtWebkit and QSsl* classes) without the fixes above.

      Note that to upgrade to this version you do not need to reinstall gnupoc, just qt. So you can either remove the old qt installation directory , or simply use the v2 installer to install it to a new place, keeping the old one (if you want).

      Just make sure to use the correct version in the PATH are you are all good.🙂

  8. josep says:

    I have installed SDK without problems and generated the modified example but,

    when I try to install the .sis file generated in nokia 5800 xpressmusic a warning is showed: “Qt” component not present. If I ignore the installation finish successfully but nothing happen when I try to run it

    Have I to install in the phone a kind of Qt runtime before to install (and run) the programs generated with this SDK? where can I find it?

  9. Wolfgang says:

    Yes, you have to install the Qt Runtime.

    You will find it in the installation folder of your Qt for Symbian SDK.
    It is called “qt_installer.sis”.
    There are some compiled demos like “fluidlauncher” or “qt_demos.sis”, too.

  10. koolmint says:

    I followed your instruction but I got some errors as below:

    ./gnupoc_1.15_S60_5.0_installer_v1.sh
    Verifying archive integrity… All good.
    Uncompressing Unofficial GnuPoc installer (OpenC 1.6.0 + S60 5.0 SDK)..
    eval: 1: ./install.sh: Permission denied

    I have no idea why the script refers ./install.sh, obviously there isn’t install.sh. Guess what’s wrong with my system?
    I use Ubuntu 9.10 x64, please advice me.

  11. lizardo says:

    The installer script temporarily unpacks the installation files to a subdirectory under /tmp, then runs a ./install.sh script inside it. If your /tmp partition has the “noexec” mount option enabled, it will not allow to run the install.sh script inside the installer from that directory.

    Try this instead:

    TMPDIR=$PWD ./gnupoc_1.15_S60_5.0_installer_v1.sh

    It will temporarily set the temp directory to the current directory while the installer runs. Do not worry about using the current directory, as the directory unpacked will have random name and will be removed before the installer finishes.

    Let me know if that works or not.🙂

  12. Markus Rathgeb says:

    The installation of gnupoc fails for my by compiling libelf-elftoolchain:

    cc -I. -c -o elf_scn.o elf_scn.c
    elf_scn.c: In function ‘_libelf_load_scn’:
    elf_scn.c:96: error: expected expression before ‘struct’

    The code part is:
    ===
    /*
    * If the file is using extended numbering then section #0
    * would have already been read in.
    */

    i = 0;
    if (!STAILQ_EMPTY(&e->e_u.e_elf.e_scn)) {
    assert(STAILQ_FIRST(&e->e_u.e_elf.e_scn) ==
    STAILQ_LAST(&e->e_u.e_elf.e_scn, _Elf_Scn, s_next));
    ===

    The preprocessor changed this to:
    ===
    i = 0;
    if (!((&e->e_u.e_elf.e_scn)->stqh_first == ((void *)0))) {
    ((((&e->e_u.e_elf.e_scn)->stqh_first) == ((((&e->e_u.e_elf.e_scn))->stqh_first == ((void *)0)) ? ((void *)0)
    : ((struct _Elf_Scn *)(void *) ((char *)((&e->e_u.e_elf.e_scn)->stqh_last) – __offsetof(struct _Elf_Scn, s_ne
    xt))))) ? (void) (0) : __assert_fail (“((&e->e_u.e_elf.e_scn)->stqh_first) == ((((&e->e_u.e_elf.e_scn))->stqh_
    first == ((void *)0)) ? ((void *)0) : ((struct _Elf_Scn *)(void *) ((char *)((&e->e_u.e_elf.e_scn)->stqh_last)
    – __offsetof(struct _Elf_Scn, s_next))))”, “elf_scn.c”, 97, __PRETTY_FUNCTION__));
    ===

    It works if i comment out the assertion
    ===
    i = 0;
    if (!STAILQ_EMPTY(&e->e_u.e_elf.e_scn)) {
    #if 0
    assert(STAILQ_FIRST(&e->e_u.e_elf.e_scn) ==
    STAILQ_LAST(&e->e_u.e_elf.e_scn, _Elf_Scn, s_next));
    #endif
    ===

    Is it possible to create a patch (perhaps not comment out the assert function call but find a solution) and you apply it in your install script after unpacking and before compiling?

    Host compiler information:
    ===
    $ gcc -v
    Using built-in specs.
    Target: i686-pc-linux-gnu
    Configured with: /var/tmp/portage/sys-devel/gcc-4.4.2/work/gcc-4.4.2/configure –prefix=/usr –bindir=/usr/i686-pc-linux-gnu/gcc-bin/4.4.2 –includedir=/usr/lib/gcc/i686-pc-linux-gnu/4.4.2/include –datadir=/usr/share/gcc-data/i686-pc-linux-gnu/4.4.2 –mandir=/usr/share/gcc-data/i686-pc-linux-gnu/4.4.2/man –infodir=/usr/share/gcc-data/i686-pc-linux-gnu/4.4.2/info –with-gxx-include-dir=/usr/lib/gcc/i686-pc-linux-gnu/4.4.2/include/g++-v4 –host=i686-pc-linux-gnu –build=i686-pc-linux-gnu –disable-altivec –disable-fixed-point –without-ppl –without-cloog –enable-nls –without-included-gettext –with-system-zlib –disable-checking –disable-werror –enable-secureplt –disable-multilib –enable-libmudflap –disable-libssp –enable-libgomp –enable-cld –with-python-dir=/share/gcc-data/i686-pc-linux-gnu/4.4.2/python –disable-libgcj –with-arch=i686 –enable-objc-gc –enable-languages=c,c++,objc,obj-c++,fortran –enable-shared –enable-threads=posix –enable-__cxa_atexit –enable-clocale=gnu –with-bugurl=http://bugs.gentoo.org/ –with-pkgversion=’Gentoo 4.4.2 p1.0′
    Thread model: posix
    gcc version 4.4.2 (Gentoo 4.4.2 p1.0)
    ===

    • lizardo says:

      Looks like gnupoc has problems compiling with gcc 4.4.x.

      Can you report this bug to the gnupoc maintainer? His contact e-mail is at the bottom of the gnupoc page:

      http://www.martin.st/symbian/

      He will probably help finding the correct solution. Once a new release contains the correct fix, I’ll update the installer.

      In the meantime, you can modify the installer script locally. See how:

      1) Install makeself (from your distribution or from http://www.megastep.org/makeself/

      2) Unpack the installer “source” (this will unpack to the “gnupoc_installer” directory):

      ./gnupoc_1.15_S60_5.0_installer_v1.sh \
        --keep --noexec --target gnupoc_installer

      3) Copy your patch (e.g. gnupoc_gcc44.patch) to the unpacked directory and modify the install.sh script found there to add this line after the “tar -xzf $DL_DIR/gnupoc-package-$gnupoc_ver.tar.gz” line:

      patch -d gnupoc-package-$gnupoc_ver \
        -p1 < gnupoc_gcc44.patch

      (change the patch arguments depending on how you made the patch)

      4) Repack the installer:

      makeself --nox11 \
        gnupoc_installer \
        gnupoc_1.15_S60_5.0_installer_v1_modified.sh \
        "Unofficial GnuPoc 1.15 installer (modified)" \
        ./install.sh

      That's it!

      • Markus Rathgeb says:

        The gnupoc maintainer detect that it is a gentoo related problem. The gentoo glibc is patched and that patch produce the error.
        I will report it to the gentoo bugzilla soon.

  13. Markus Rathgeb says:

    Next “problem”:

    I have to use the “-spec” option of qmake to specify the QMAKESPEC
    “qmake -spec ~/symbian/qt-4.6.1/mkspecs/symbian-abld”

    If I do not use the “-spec” option the following is used (I used strace, to find it out):
    ~/symbian/qt-4.6.1/mkspecs/linux-g++

    • lizardo says:

      This should not happen because the installer applies a patch to the Qt sources to not require this… Did you make any changes to the installer, or are you using a different Qt for Symbian installer executable ?

      • Markus Rathgeb says:

        I downloaded the file “qt-symbian-opensource-4.6.1.exe” this week (I believe it was tuesday or wednesday) and the installer today (okay, yesterday — on friday).

        No changes was made.

        I used “script” to generate a log file about the installation — if it will help.

  14. lizardo says:

    @Markus: please paste your log to http://pastebin.com (or a similar site) and send me the URL, it could help🙂 Unfortunately I don’t have a gentoo system at hand so I’ll need your help to test things.

    By the way, what is the MD5 sum of the qt-symbian-opensource-4.6.1.exe file you downloaded? It is very unlikely that they changed the installer without changing the file name, but in any case, mine is:

    58e2d8cf5ce5a128fc075fc67ccb5354

    • Markus Rathgeb says:

      Hm, it is the identical MD5 sum

      $ md5sum -b qt-symbian-opensource-4.6.1.exe
      58e2d8cf5ce5a128fc075fc67ccb5354 *qt-symbian-opensource-4.6.1.exe

      I hope there is no mistake at my side.😉

      It is also possible to set the envirnmonet QMAKESPEC so it is no probem for me (because EPOCROOT and PATH have to be set too) but it should be solved.
      ===
      export PATH=/home/maggu2810/symbian/gnupoc/bin:$PATH
      export EPOCROOT=/home/maggu2810/symbian/gnupoc/symbian-sdks/5.0/ # trailing “/” is required!
      export PATH=/home/maggu2810/symbian/qt-4.6.1/bin:$PATH
      export QMAKESPEC=/home/maggu2810/symbian/qt-4.6.1/mkspecs/symbian-abld
      ===
      in the shell.

      The log file have a size of 8,7 MB😉

    • Markus Rathgeb says:

      Sorry, I realizied, that Gentoo sets “QMAKESPEC=linux-g++” as environment variable.
      So it is now Gentoo related.

      But because this could be happen on every machine, would it be better to add it to the message
      ===
      Installation has finished. Before using the GnuPoc SDK, run these commands on the console:

      export PATH=/bin:$PATH
      export EPOCROOT=/symbian-sdks/5.0/ # trailing “/” is required!

      (These commands must be run again every time a new console is opened.)
      ===
      That it is good to thet QMAKESPEC?

      • lizardo says:

        In that case, I think it is better to add a:

        unset QMAKESPEC

        to the instructions. This will guarantee it will not be overridden anywhere. It is also harmless on systems where the variable is not set. I’ll add this in the next installer release.

        In my opinion, it is not a good idea to set QMAKESPEC=symbian-abld because it affects globally every qmake call, even if you use your system qmake (not the one in Qt for Symbian).

      • Markus Rathgeb says:

        Just a note:

        It was set by the package x11-libs/qt:3 in Gentoo.
        The 3.x.x versions of Qt will be removed sooner or later. But who knows, if there is not another system that has it set…

  15. gemidjy says:

    This file gnu-csl-arm-2005Q1C-arm-none-symbianelf-i686-pc-linux-gnu.tar.bz2 is actually a .tar archive (not tar.bz2). after some research I found out that the gnupoc..sh script is trying to tar jxf the archive, instead it should rename it to .tar file and then tar xf it. The error is on the site where it is hosted.

    Regards.

    • lizardo says:

      I just downloaded the file again and I got a regular .tar.bz2 file (tested with the “file” command). Make sure you are not using a download manager (such as DownThemAll) which sometimes decompresses the stream on the fly.

      Also try downloading the file with e.g. wget.

  16. Pingback: Installing Qt for Symbian SDK 4.6.2 on Linux « Anderson Lizardo's Blog

  17. Pingback: Running Qt for S60 SDK on Linux « Anderson Lizardo's Blog

  18. Compte says:

    I run into the following problem when running “make debug-gcce”:
    ………………………
    Bytepair compression not supported!
    ……………………..

    But after running “make sis”:
    Successfully created calculator_debug-gcce.sis using certificate: Self Signed!

    The sys file does not run on my Nokia 5310 with Symbian v 09.42. Not even the qt_installer.sis from Qt’s directory works for my phone.
    I have debug output at:
    http://pastebin.com/w9SS51jp
    Can anyone help?

    • lizardo says:

      “Bytepair compression not supported” is not an error. The SIS is created properly even with this message.

      http://www.forum.nokia.com/devices/5310_XpressMusic/ says 5310 model is S40, not S60. Unfortunately Qt currently works only on S60 devices…

      • Compte says:

        Thanks,
        I updated my OS to the latest version but seems that is not enough.
        Nokia does not have a standard when it comes to Apps and compatibility unless your into Maemo. The new project Meego is to bring Qt development for Maemo, probably devices will remain the same, and by the looks, some Symbian.

  19. Sander says:

    Hi!
    Thanks for the article and installer. But I run into a problem:

    Running the qt_xxxx_installer_v2.sh it ends up with this output:

    Everything is Ok
    ln: accessing `/home/sander/bin/gnupoc/symbian-sdks/5.0//epoc32/release/armv5/lib/phonon{00040601}.dso’: Permission denied

    This list tell why this error occurs:

    sander@ubuntu910-hp:~/bin/gnupoc/symbian-sdks/5.0$ ls -la
    total 1472
    drwxr-xr-x 7 root root 4096 2010-03-22 14:35 .
    drwxr-xr-x 3 root root 4096 2010-03-22 14:32 ..
    drwx—— 10 root root 4096 2010-03-22 14:35 epoc32
    drwx—— 18 root root 4096 2010-03-22 14:35 examples
    -rw-r–r– 1 root root 2775 2010-03-22 14:34 GCCE_readme.txt
    -rw-r–r– 1 root root 14539 2010-03-22 14:34 Nokia_EULA.txt
    drwx—— 4 root root 4096 2010-03-22 14:35 nokia_plugin
    -rw-r–r– 1 root root 18742 2010-03-22 14:34 releasenotes.txt
    -rw-r–r– 1 root root 1434519 2010-03-22 14:34 S60 5th Edition SDK Installation Guide.pdf
    drwx—— 57 root root 4096 2010-03-22 14:35 s60cppexamples
    drwx—— 7 root root 4096 2010-03-22 14:35 s60tools

    …. but what causes the limited permissions I don’t know. Did the gnupoc-installer script assign the wrong permissions?

    Thanks!
    Sander

    • lizardo says:

      Try running the script as your regular user. You should not run it as root. Make sure to remove the created directory before trying again (~/bin/gnupoc).

      • Sander says:

        Thanks for the quick reply Lizardo!

        As I forgot to set the execution-flag (chmod +x) for both install scripts, I tried to run the scripts with sudu. Which didn’t help of course with the x-flag cleared.
        Apparently the superuser mode remains regardless running the scripts without the sudo-prefix.
        It now installs & examples build!

        Only thing I am missing now is a s60-based phone😀

  20. alynch4047 says:

    Thanks for this, worked first time.

    Now, what’s a sis file?😉 – I’ve got some reading to do….

  21. Pingback: My blog in 2010 « Anderson Lizardo's Blog

  22. Yasin says:

    Hallo,
    Greetings!
    My name is Yasin from Indonesia

    please visit my blog Behind

    greetings,

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s