[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