Compilling Qt Creator 2.2 on FreeBSD



  • Hi!

    I'm trying to compile Qt Creator 2.2 on a FreeBSD machine. Qt version there is 4.6 and, so, I first compiled successfully Qt 4.7.3 locally on my machine. Attempts to compile Qt Creator 2.1 all failed and, so, I've tried to compile v2.2. It compiles smoothly but, when I try to run it, it prints this message:

    bq. Failed to load core: /home/gustavo/prog/lib/qtcreator/plugins/Nokia/libCore.so: Cannot load library /home/gustavo/prog/lib/qtcreator/plugins/Nokia/libCore.so: (/home/gustavo/prog/lib/qtcreator/libBotan.so.1: Undefined symbol "_ZTVN5Botan11POSIX_TimerE")

    Does anyone know what may be causing this problem?

    Thanks!


  • Moderators

    Did you try running c++filt on the symbol name to demangle it and then went on a search for where it is actually defined? You might be needing an additional library or something to get it.

    PS: Patches to Qt Creator to fix the build are welcome:-)



  • Thanks Tobias!

    Running c++filt get me this result:
    @c++filt _ZTVN5Botan11POSIX_TimerE

    vtable for Botan::POSIX_Timer
    @

    So, there's something in Botan build configuration preventing it to load this class at build time. Fortunately, I've noticed Qt Creator 2.0 was showing this same problem, and, for this version, there's a patch in FreeBSD ports, namely:
    @
    --- ./src/libs/3rdparty/botan/src/src.pro.orig 2010-08-24 11:46:09.000000000 +0400
    +++ ./src/libs/3rdparty/botan/src/src.pro 2010-11-29 03:49:46.829707166 +0300
    -564,10 +564,6
    timer/gettimeofday/tm_unix.cpp
    }

    -linux*-g++* {

    • SOURCES += timer/posix_rt/tm_posix.cpp
      -}
      +SOURCES += timer/posix_rt/tm_posix.cpp

    -linux*-g++* {

    • LIBS += -lrt
      -}
      +LIBS += -lrt

    @

    This fix the Botan::POSIX_Timer problem. Now I'm able to launch Qt Creator. Nevertheless, another problem has arrived: when I try to load a project file, a dialog appears displaying this message:

    bq. No valid qt versions found. Please add a qt version in Tools/Options or via the maintenance tool of the SDK

    This is really strange, because the path of my Qt local installation is already set up correctly in Tools/Options (Qt Creator just found it automatically). Any idea what went wrong this time?


  • Moderators

    Does "this patch":http://pastebin.com/7pQyvFDj fix the build for you?

    Is the Qt version marked as valid in Tools->Options->Qt4? My guess is that this worked. Is there any tool chain set up in Tools->Options->Qt4? Does it have a sane ABI (hover it, please)? My guess that this is what is going wrong here. If it indeed is: Can you please provide me with the output of gcc -dumpmachine? Thanks!



  • Everything in Qt4 configuration seems to be ok:

    Name: Qt in PATH
    ABI: x86-linux-generic-elf-64bit
    mkspec: freebsd-g++
    qmake: /home/gustavo/opt/Qt-4.7.3/bin/qmake
    Version: 4.7.3
    QT_INSTALL_LIBS /home/gustavo/opt/Qt-4.7.3/demos
    QT_INSTALL_EXAMPLES /home/gustavo/opt/Qt-4.7.3/examples
    QT_INSTALL_DOCS /home/gustavo/opt/Qt-4.7.3/doc
    QT_INSTALL_DATA /home/gustavo/opt/Qt-4.7.3/
    QT_INSTALL_CONFIGURATION /etc/xdg
    QT_INSTALL_IMPORTS /home/gustavo/opt/Qt-4.7.3/imports
    QT_INSTALL_TRANSLATIONS /home/gustavo/opt/Qt-4.7.3/translations
    QMAKE_MKSPECS /home/gustavo/opt/Qt-4.7.3/mkspecs
    QT_INSTALL_PLUGINS /home/gustavo/opt/Qt-4.7.3/plugins
    QT_INSTALL_PREFIX /home/gustavo/opt/Qt-4.7.3/
    QT_INSTALL_HEADERS /home/gustavo/opt/Qt-4.7.3/include
    QT_VERSION 4.7.3
    QT_INSTALL_BINS /home/gustavo/opt/Qt-4.7.3/bin

    The output of gcc -dumpmachine:
    amd64-undermydesk-freebsd

    About the patch you provided, I'm gonna testing it to provide you a feedback.

    Thanks.


  • Moderators

    Yeap, it does not know "amd64-undermydesk-freebsd", so it will not recognize that this is something compatible with your freebsd Qt... Plus it obviously assumed your Qt to be linux, too.

    So there is quite a bit going wrong. Could you please send me your libQtCore.so (the actual lib, not the symlinks;)? That would be highly appreciated!



  • How do I send it to you? By mail?

    By the way, let me point a related usability bug in Qt Creator: at my work, only some projects are currently using any Qt library. Nonetheless, we want to use Qt Creator as our IDE for every C++ project, regardless of it being Qt based or not. So, for many projects, it's not necessary that Qt Creator finds any Qt configuration at all. But, with this bug, we are not able to use Qt Creator even for this non-Qt projects, because Qt Creator does require a working Qt configuration for every project.



  • And the patch you provided fixed the build issue.
    Thanks!


  • Moderators

    We do not require a working Qt in Qt Creator. QMake based projects do, since qmake itself is part of Qt and we of course need to find that.

    You can use qmake based projects without Qt though, or CMake or generic projects (both of which do not even ask for Qt).



  • Pretty interesting. I've never heard Qt Creator could use another file format besides .pro to set up a project structure. I was thinking one must use a .pro file in order to Qt Creator recognise and index a project tree even for non Qt projects. This is a usefull information.


  • Moderators


  • Moderators

    Just opened http://bugreports.qt.nokia.com/browse/QTCREATORBUG-4879 about misdetection of freebsd binaires as linux.

    This will make it hard to work on freebsd since Creator will not match up the compiler with the Qt version and thus block building:-/

    The only workaround I can think of right now is to feed Qt Creator with a compiler that claims via "gcc -dumpmachine" to be targetting Linux. A small script wrapper should do that... then the (now misdetected) compiler will match up with the misdetected Qt and all should be well.



  • Thank you, Tobias! I'm gonna try this workaround.



  • Hello All,

    I've compile the qt-creator 2.2.0 and I have the exact same error when trying to run it, i.e.

    bash-4.2# bin/qtcreator
    Failed to load core: /export/home/Download/Qt-creator/lib/qtcreator/plugins/Nokia/libCore.so: Cannot load library /export/home/Download/Qt-creator/lib/qtcreator/plugins/Nokia/libCore.so: (ld.so.1: qtcreator: fatal: relocation error: file /download/Qt-creator/lib/qtcreator/libBotan.so.1: symbol _ZTVN5Botan11POSIX_TimerE: referenced symbol not found)

    bash-4.2# nm -C /download/Qt-creator/lib/qtcreator/libBotan.so.1 | grep _ZTVN5Botan11POSIX_TimerE
    [_ZTVN5Botan11POSIX_TimerE]
    bash-4.2# nm /download/Qt-creator/lib/qtcreator/libBotan.so | grep _ZTVN5Botan11POSIX_TimerE
    [7605] | 0| 0|NOTY |GLOB |0 |UNDEF |_ZTVN5Botan11POSIX_TimerE

    and well the patch it seems to work for FreeBSD, but I'm working in Solaris 10 and well checking the file

    vim /download/qt-creator-2.2.0-src/src/libs/3rdparty/botan/src/timer/gettimeofday/info.txt

    realname "Unix Timer"

    define TIMER_UNIX

    load_on auto
    modset unix,beos

    <add>
    tm_unix.cpp
    tm_unix.h
    </add>

    <os>
    aix
    beos
    cygwin
    darwin
    freebsd
    dragonfly
    hpux
    irix
    linux
    netbsd
    openbsd
    qnx
    solaris
    tru64
    </os>

    <requires>
    timer
    </requires>

    Solaris is listed as the "detected" OS, I don't know how to check if the compiler does a good detection of the OS, I have both libraries, librt et libposix4, which i read were the needed libraries to get all the posix timing routines.

    Do you have any ideas on how getting qtcreator to run?

    Thanks in advance



  • Hi, Belisario!

    In the file src/libs/3rdparty/botan/src/src.pro, did you try just removing the folowing lines: 287, 289, 571, 573, 575 and 577? If this works, we can do a small change in the patch Tobias provided to fix compilation in Solaris as well.



  • Thanks Gustavo, It runs now, qtcreator, but I have the exact same problemyou had, when trying to create or open a project it says no valid qt version found! but verifying under tools/options/qt4 Qtcreator has automatically taken the qmake on the PATH variable.

    And on the shell where i ran the qtcreator i found these 3 different messages repeated:

    QIconvCodec::convertFromUnicode: using Latin-1 for conversion, iconv failed: Resource temporarily unavailable
    QIconvCodec::convertFromUnicode: using Latin-1 for conversion, iconv failed: Error 0
    QIconvCodec::convertFromUnicode: using Latin-1 for conversion, iconv failed: Error 0
    QIconvCodec::convertFromUnicode: using Latin-1 for conversion, iconv failed: Error 0
    QIconvCodec::convertFromUnicode: using Latin-1 for conversion, iconv failed: Error 0
    QIconvCodec::convertFromUnicode: using Latin-1 for conversion, iconv failed: Error 0
    QIconvCodec::convertFromUnicode: using Latin-1 for conversion, iconv failed: Error 0
    QIconvCodec::convertFromUnicode: using Latin-1 for conversion, iconv failed: No such file or directory



  • I just check and I'm guessing the problem is on the ABI value:

    ABI: x86-linux-generic-elf-32bit

    when i have a Solaris machine:

    bash-4.2# gcc -dumpmachine
    i386-pc-solaris2.10


  • Moderators

    No surprise there considering that the fix did not go into the 2.2 branch:-)

    Please try master (or backport the patch from there, the SHA is in the bugreport).



  • I'm sorry but I don't follow :D

    I cannot find the Master version, from where can I download it?



  • You will have to clone the sources from "gitorious":https://qt.gitorious.org/qt-creator and build Creator yourself.

    Alternatively, you can try one of the snapshots on "get.qt.nokia.com":http://get.qt.nokia.com/qtcreator/snapshots/



  • Thanks Volker, I have the latest clone source, still work to do though for make it compile, nothing I haven' t done before, I will post a summary of changes I'll make thru all the process to see if ww can get it in the next fix


  • Moderators

    Please send in merge requests through gitorious:-) Thanks!



  • Hello all, I just wanted to tell you that the master version that I downloaded, the one from the 24 may, still has the same problem about the "not recognizing" of the Solaris OS, any way I still can use the IDE to edit the files and then compile them and build them in a console.

    I hope soon this problem is fixed.

    ABI: x86-linux-generic-elf-32bit


  • Moderators

    Belisario: Feel free to add a bug report about the issue of solaris not being recognized. I do not have access to solaris, so I can do little about the issue, but having a bug report is always nice.

    Having said that: I am trying to add a way to override the detection, so that you should be able to set up the correct ABI, even if the detection fails.

    Basically it does not matter what ABI is detected as long as your compiler and Qt version match up. So if you can get the tool chain to be recognized as "linux" you should be fine. A wrapper that returns "i686-linux-gnu" or something like that when called with "-dumpmachine" should do that. For everything else the wrapper should just delegate to your gcc.



  • Is there any news or fixes in qtcreator?
    I still can not create project in QtCreator 2.2.81 (commit 42e5e5f00afb02c764772ee1bded08fd1ce37689) under FreeBSD :(
    It says

    bq. :-1: error: Qt Creator needs a tool chain set up to build. Please configure a tool chain in Project mode.

    when I try to compile exising project
    and

    bq. No valid qt Version found.
    Please add a Qt version in Tools/Options or via tha maintenance tool of the SDK

    when I try to create new one.

    bq. %gcc46 -dumpmachine
    i386-portbld-freebsd9.0

    bq. %gcc -dumpmachine
    i386-undermydesk-freebsd


  • Moderators

    Sorry, BSD support is not a priority to me. I am working on a way to override the autodetection though which would at least allow you to override the autodetected settings. Till that lands please use the workaround of making gcc claim to be Linux... your Qt is already reported as Linux anyway. Once gcc and Qt ABIs match Creator is happy again:-)

    Patches to recognize Qt as *BSD (and solaris and whatnot) are welcome. Please include the relevant Qt Core libs as test data so we can make sure to not accidentally break them again. Nobody in the team uses any of the BSDs:-(

    This does of course apply to any other platform that is currently not supported.



  • Am I right that I shuold change this function?

    @static QListProjectExplorer::Abi guessGccAbi(const QString &m)@

    in gcctoolchain.cpp?



  • Ok, It is seems that I fixed QtCreator...



  • Hello DimanNe, what fix did you make? did you add an else if block? and then? was that all? I can do the same for Solaris and then send the merge message to add a definitive fix to the Qt Creator :D



  • This is my merge request https://qt.gitorious.org/qt-creator/qt-creator/merge_requests/338
    BUT!!! It is still workaround, because QtCreator can not choose proper spec option for qmake while building project. It chooses "linux-g++" instead "freebsd-g++", but you can override it manually in "Details" in Project tab


  • Moderators

    DimanNe: Your MR is indeed just a workaround. I recommend doing the same thing with a wrapper script around gcc that returns a linux value when running wrapper -dumpmachine:-) Seems easier for me to do than hack around in Qt Creator:-)



  • And now, it seems, QtCreator chooses proper spec file on FreeBSD!


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.