[devel] __cxa_pure_virtual [#40700] FAILED MySQL.git=5.1.56-alt2

Alexey Tourbin at на altlinux.ru
Чт Мар 17 07:48:32 UTC 2011


On Thu, Mar 17, 2011 at 10:26:50AM +0300, Alexey Tourbin wrote:
> Разобраться, почему так происходит.
> 
> $ rpm -ql amarok |xargs fgrep -l __cxa_pure_virtual |xargs -Ix -n1 /usr/lib/rpm/ldd --bindings x '' |& grep __cxa_pure_virtual |sort -u -k4,4 -k7,7
>      28807:     binding file /usr/lib/kde3/bin/amarok [0] to /usr/lib64/libstdc++.so.6 [0]: normal symbol `__cxa_pure_virtual' [CXXABI_1.3]
>      28814:     binding file /usr/lib/kde3/bin/amarokapp [0] to /usr/lib64/libmysqlclient.so.16 [0]: normal symbol `__cxa_pure_virtual' [libmysqlclient _16]
> ...
> $ nm -D /usr/lib64/libstdc++.so.6 |fgrep __cxa_pure_virtual
> 00000000000ba8c0 T __cxa_pure_virtual
> $ nm -D /usr/lib64/libmysqlclient.so.16 |fgrep __cxa_pure_virtual
> 00000000000b9ad0 W __cxa_pure_virtual
> $ objdump -p /usr/lib/kde3/bin/amarok |grep -w NEEDED |egrep 'stdc|mysql'
>   NEEDED               libstdc++.so.6
> $ objdump -p /usr/lib/kde3/bin/amarokapp |grep -w NEEDED |egrep 'stdc|mysql'
>   NEEDED               libmysqlclient.so.16
>   NEEDED               libstdc++.so.6
> $
> 
> Т.е. в libmysqlclient.so.16 имеется weak symbol, а в libstdc++.so.6 -
> нормальный.  Но libmysqlclient.so.16 в списке требуемых библиотек идёт
> раньше, что по идее не дложно помешать предпочесть нормальный символ.

Ох, тут ещё versioning наслоился!
Предпочтение идёт по link-time версионированию.
Тогда взяла не Зинка, а bfd.  Ё-моё...

$ readelf -W --dyn-syms /usr/lib/kde3/bin/amarok /usr/lib/kde3/bin/amarokapp |grep __cxa_pure
    72: 0000000000402a60     0 FUNC    GLOBAL DEFAULT  UND __cxa_pure_virtual на CXXABI_1.3 (5)
   172: 0000000000403e38     0 FUNC    GLOBAL DEFAULT  UND __cxa_pure_virtual на libmysqlclient_16 (8)
$


Подробная информация о списке рассылки Devel