[Marble-devel] Using Marble library with Qt Embedded
Jeremie Scheer
jeremie.scheer at armadeus.com
Thu May 31 16:20:12 UTC 2012
Hi,
I've put traces in Qt sources to see where it crashes. And it seemed to
be crashing after the mapWidget->show() when I call qApp->exec and when
it is launching the *eventLoop* in Qt.
So is there an element in Marble that is related to the eventLoop that
could block its execution ?
Regards,
--
Jérémie Scheer
Software Engineer
Tel: +33 (0)9 72 29 41 44
Fax: +33 (0)9 72 28 79 26
Armadeus Systems - A new vision of the embedded world
http://www.armadeus.com
On 05/31/2012 02:57 PM, Jeremie Scheer wrote:
> Hi Dennis,
>
> In fact I compile Marble and my application with Buildroot, that is a
> package compiler for embedded system. So all packages are compiled on
> my host PC and then run on the embedded system.
>
> This is why Qt headers and libraries paths are not the same in
> CMakeCache.txt (paths where Qt embedded is intalled on my PC) and on
> my system. But Qt libraries can be load on it with LD_LIBRARY_PATH,
> that is correctly set.
>
> On my PC, Marble is configured with CMake like this:
>
> cmake marble \
> -DCMAKE_TOOLCHAIN_FILE="toolchainfile.cmake" \
> -DCMAKE_INSTALL_PREFIX="/usr"
>
>
> /toolchainfile.cmake/ initializes all necessary CMake environment
> variables:
>
> set(CMAKE_SYSTEM_NAME Linux)
> set(CMAKE_C_COMPILER
> /srv/developpements/BEF2012/software/bsp/buildroot/output/host/usr/bin/arm-unknown-linux-uclibcgnueabi-gcc)
> set(CMAKE_CXX_COMPILER
> /srv/developpements/BEF2012/software/bsp/buildroot/output/host/usr/bin/arm-unknown-linux-uclibcgnueabi-g++)
> set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Os -pipe -Os
> -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64"
> CACHE STRING "Buildroot CFLAGS" FORCE)
> set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Os -pipe -Os
> -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64"
> CACHE STRING "Buildroot CXXFLAGS" FORCE)
> set(CMAKE_INSTALL_SO_NO_EXE 0)
> set(CMAKE_PROGRAM_PATH
> "/srv/developpements/BEF2012/software/bsp/buildroot/output/host/usr/bin")
> set(CMAKE_FIND_ROOT_PATH
> "/srv/developpements/BEF2012/software/bsp/buildroot/output/host/usr/arm-unknown-linux-uclibcgnueabi/sysroot")
> set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
> set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
> set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
> set(ENV{PKG_CONFIG_SYSROOT_DIR}
> "/srv/developpements/BEF2012/software/bsp/buildroot/output/host/usr/arm-unknown-linux-uclibcgnueabi/sysroot")
>
>
> And then Marble is compiled with arm-linux-g++ compiler.
>
> If the problem is related to static functions, it is strange that the
> QSettings bug made my app crash on both x86 and ARM system whereas
> this bug (planetList) only affects ARM system.
>
> Regards,
> --
> Jérémie Scheer
> Software Engineer
> Tel: +33 (0)9 72 29 41 44
> Fax: +33 (0)9 72 28 79 26
> Armadeus Systems - A new vision of the embedded world
> http://www.armadeus.com
>
>
> On 05/31/2012 01:52 PM, Dennis Nienhüser wrote:
>> Hi Jeremie,
>>
>> interesting - note that Planet::planetList is a static function again.
>>
>> I'm wondering if there's some more serious problem in the way how
>> Marble was compiled wrt to Qt embedded, or how the environment looks
>> like when running Marble. Are there any traces to the Qt version
>> installed on the system maybe? The following checks (in the build
>> dir) might be useful to determine that:
>>
>> grep '^QT_.*_INCLUDE_DIR:PATH=' CMakeCache.txt
>> grep '^QT_.*_LIBRARY.*FILEPATH=' CMakeCache.txt
>> ldd src/marble | grep libQt
>>
>> Regards,
>> Dennis
>>
>> Am 31.05.2012 12:09, schrieb Jeremie Scheer:
>>> Hi,
>>>
>>> I've identified what caused the segfault on ARM : it was crashing
>>> during the initialization of the QStringList in Planet.cpp -
>>> planetList().
>>>
>>> I don't know why but the following code l.364 made the app crash,
>>> but only on embedded ARM system:
>>>
>>> planets << "mercury"
>>> << "venus"
>>> << "earth"
>>> << "mars"
>>> << "jupiter"
>>> << "saturn"
>>> << "uranus"
>>> << "neptune"
>>> << "pluto"
>>> << "sun"
>>> << "moon"
>>> << "sky";
>>>
>>> So I replaced it by :
>>>
>>> QString planetsStringList =
>>> "mercury,venus,earth,mars,jupiter,saturn,uranus,neptune,pluto,sun,moon,sky";
>>> planets = planetsStringList.split(",");
>>>
>>>
>>> Now MarbleWidget is correctly instanciated but my app crashes on
>>> another *Segmentation fault* after the instruction
>>> mapWidget->show();, only on ARM.
>>>
>>> Regards,
>>> --
>>> Jérémie Scheer
>>> Software Engineer
>>> Tel: +33 (0)9 72 29 41 44
>>> Fax: +33 (0)9 72 28 79 26
>>> Armadeus Systems - A new vision of the embedded world
>>> http://www.armadeus.com
>>>
>>>
>>> On 05/30/2012 10:50 AM, Jeremie Scheer wrote:
>>>> Hi Dennis,
>>>>
>>>> I tried to compile Marble with the latest master where you have
>>>> commited the fix for static QSettings and I tested it with my
>>>> application.
>>>>
>>>> The good news is that it doesn't crash anymore on a QMutex deadlock
>>>> on QVFB or ARM platforms. And without the little trick I'd done in
>>>> Qt to fix it (I commented a QMutex lock).
>>>>
>>>> For the Segmentation Fault crash, I've no more bitmaps loading
>>>> warnings with your commit but it still crashes on my ARM embedded
>>>> system.
>>>> The crash happens just when the MarbleWidget object is initialized
>>>> as it tries to get profiles for the MarbleWidgetPrivate object
>>>> (MarbleWidget.cpp : l.95).
>>>>
>>>> Regards,
>>>
>>>
>>> _______________________________________________
>>> Marble-devel mailing list
>>> Marble-devel at kde.org
>>> https://mail.kde.org/mailman/listinfo/marble-devel
>
>
> _______________________________________________
> Marble-devel mailing list
> Marble-devel at kde.org
> https://mail.kde.org/mailman/listinfo/marble-devel
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.kde.org/pipermail/marble-devel/attachments/20120531/1c05a407/attachment.html>
More information about the Marble-devel
mailing list