Bug #64387 libmysqlclient18 and libndbclient6 do not use symbol versioning
Submitted: 20 Feb 2012 20:24 Modified: 21 Feb 2012 7:00
Reporter: Steven Ayre Email Updates:
Status: Verified Impact on me:
None 
Category:MySQL Cluster: Cluster (NDB) storage engine Severity:S3 (Non-critical)
Version:7.2.4 OS:Linux
Assigned to: CPU Architecture:Any
Tags: libmysqlclient, libmysqlclient18, libndbclient, libndbclient6, library, symbol, symbols, versioning, versions

[20 Feb 2012 20:24] Steven Ayre
Description:
In MySQL Cluster 7.1, libmysqlclient16 and libndbclient4 used versioned symbols.

In MySQL Cluster 7.2, libmysqlclient18 and libndbclient6 no longer uses versioned symbols.

This appears to be as a result of the move to cmake - the libmysql/libmysql.ver.in file is no longer used as the compiler is not given the -Wl,version-script option that were used when building previous versions.

Bug #64386 reports the same issue for libmysqlclient18 in MySQL 5.5.

How to repeat:
Compile MySQL 5.5 and examine the the symbols using 'objdump -T
libmysqlclient.so.18.0.0'

Compare for example the my_connect symbols from libmysqlclient16:
000000000008dce0 g    DF .text  0000000000000144  libmysqlclient_16 my_connect
to libmysqlclient18:
0000000000039bd0 g    DF .text  0000000000000179  Base        my_connect

Suggested fix:
Use libmysql.ver.in and libndb.ver.in to generate libmysql.ver and libndb.ver and then use the -Wl,version-script ld flags, as in 5.1 under the previous build system.
[20 Feb 2012 20:35] Steven Ayre
add tags.
[21 Feb 2012 7:00] Valeriy Kravchuk
Thank you for the problem report.