[Qt-interest] [Qt4-preview-feedback] Qt-4.6 TP1 ABI compatibility
Bradley T. Hughes
bradley.hughes at nokia.com
Wed Sep 16 15:51:08 CEST 2009
ext Martin Koller wrote:
> Hi Bradley,
Hi,
(Note: in the future, keep replies on the mailing-list/newsgroup so that
everyone sees them)
> On Friday 11 September 2009, you wrote:
>> Martin Koller wrote:
>>> Hi,
>>>
>>> I have an application running with QWS (embedded Linux) Qt-4.5.2.
>>> I now compiled Qt-4.6 TP1 and only copied the libraries onto the device
>>> (I have added -openvg to configure). Starting my app gives some
>>> unresolved symbols now.
>>> Is there a known problem or am I doing something wrong ?
>>> I thought 4.6 will be upward binary compatible ?
>>>
>>> undefined symbol: _Z34QBasicAtomicInt_fetchAndAddOrderedPVii
>>> (/mnt/flc/pvss/pvss2_v4.0/bin/libewo.so.3) undefined symbol:
>>> _Z34QBasicAtomicInt_fetchAndAddOrderedPVii
>>> (/mnt/flc/pvss/pvss2_v4.0/bin/libCtrlV40_000.so) undefined symbol:
>>> _Z34QBasicAtomicInt_fetchAndAddOrderedPVii
>>> (/mnt/flc/pvss/pvss2_v4.0/bin/libBasicsV40_000.so)
>> These symbols come from the "generic" architecture, which means your code
>> was compiled against a version of Qt that did not know anything about your
>> CPU architecture. It seems that 4.6-tp1 has detected a real CPU
>> architecture, and has switched to using inline assembler for the atomic
>> implementation.
>>
>> Which architecture are you using? What did your 4.5 version use? You can
>> find this out by looking for the QT_ARCH line in mkspecs/qconfig.pri (which
>> is written out by configure).
>>
>
> 4.5.2: QT_ARCH = arm
Strange... considering the error you got above, it seems that libBasics,
libCtrlV40, etc. wheren't built with the arm architecture.
> 4.6: QT_ARCH = arm
>
> Hmm ...
> I attach both qconfig.pri files.
>
> I used slightly different configure options (in 4.6 I omitted additional
> things to build, e.g. no-cups, no-iconv, ...) if that matters.
This can have an effect, but after looking at the other symbols that went
missing, it REALLY looks like you built some of your binaries against a
version of Qt that was using the "generic" atomic implementation. When
building for ARM, the typdef for qreal changes from double to float, and
many of the symbols you were missing took double arguments (and I'd bet that
your new Qt libraries only have float versions).
--
Bradley T. Hughes (Nokia-D-Qt/Oslo), bradley.hughes at nokia.com
Sandakervn. 116, P.O. Box 4332 Nydalen, 0402 Oslo, Norway
More information about the Qt-interest-old
mailing list