[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