FS#48394 - [binutils] [libmariadbclient] Versioned symbols missing from library in 10.1.12-1

Attached to Project: Arch Linux
Opened by Brendan Zerr (axonxorz) - Tuesday, 01 March 2016, 21:56 GMT
Last edited by Bartłomiej Piotrowski (Barthalion) - Wednesday, 02 March 2016, 08:00 GMT
Task Type Bug Report
Category Packages: Extra
Status Closed
Assigned To Bartłomiej Piotrowski (Barthalion)
Architecture All
Severity Medium
Priority Normal
Reported Version
Due in Version Undecided
Due Date Undecided
Percent Complete 100%
Votes 1
Private No

Details

Description: Using newly-compiled Python-mysql (Tested with MySQL-python and oursql) libraries, those libraries fail to load with the following error:
ImportError: /usr/lib/python2.7/site-packages/oursql.so: symbol mysql_stmt_affected_rows, version libmysqlclient_16 not defined in file libmysqlclient.so.18 with link time reference

Or one very similar to that. It seems the issue is that the new package version does not define libmysqlclient_16 symbols and they are relied upon

Official MariaDB applications are not affected (mysql, mysqldump, etc)

Downgrading to libmariadbclient-10.1.11-1 fixes the problem.
This task depends upon

Closed by  Bartłomiej Piotrowski (Barthalion)
Wednesday, 02 March 2016, 08:00 GMT
Reason for closing:  Fixed
Additional comments about closing:  mariadb 10.1.12-2
Comment by Alexander Grothe (seahawk1986) - Tuesday, 01 March 2016, 22:50 GMT
I did some research and it seems to me that this problem has already been described in several places:
https://bbs.archlinux.org/viewtopic.php?id=209560
https://bugzilla.redhat.com/show_bug.cgi?id=1312578
https://bugzilla.redhat.com/show_bug.cgi?id=1312151
https://sourceware.org/bugzilla/show_bug.cgi?id=19698

A possible fix is supposedly to update binutils to a more recent version: https://sourceware.org/bugzilla/show_bug.cgi?id=19698#c21
and recompile mariadb.

However I have not jet been able to recompile mariadb because of an error when checking the compiler capabilities although gcc 5.30 is installed:
$ LANG=C c++ -v
Using built-in specs.
COLLECT_GCC=c++
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-unknown-linux-gnu/5.3.0/lto-wrapper
Target: x86_64-unknown-linux-gnu
Configured with: /build/gcc/src/gcc-5-20160209/configure --prefix=/usr --libdir=/usr/lib --libexecdir=/usr/lib --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=https://bugs.archlinux.org/ --enable-languages=c,c++,ada,fortran,go,lto,objc,obj-c++ --enable-shared --enable-threads=posix --enable-libmpx --with-system-zlib --with-isl --enable-__cxa_atexit --disable-libunwind-exceptions --enable-clocale=gnu --disable-libstdcxx-pch --disable-libssp --enable-gnu-unique-object --enable-linker-build-id --enable-lto --enable-plugin --enable-install-libiberty --with-linker-hash-style=gnu --enable-gnu-indirect-function --disable-multilib --disable-werror --enable-checking=release
Thread model: posix
gcc version 5.3.0 (GCC)

Configuring ends with this error message:
[...]
-- Performing Test HAVE_STDCXX11
-- Performing Test HAVE_STDCXX11 - Failed
-- Performing Test HAVE_STDCXX0X
-- Performing Test HAVE_STDCXX0X - Failed
CMake Error at storage/tokudb/PerconaFT/cmake_modules/TokuSetupCompiler.cmake:180 (message):
/usr/bin/c++ doesn't support -std=c++11 or -std=c++0x, you need one that
does.
Call Stack (most recent call first):
storage/tokudb/PerconaFT/CMakeLists.txt:35 (include)


-- Configuring incomplete, errors occurred!
See also "/home/alexander/src/mariadb/src/build/CMakeFiles/CMakeOutput.log".
See also "/home/alexander/src/mariadb/src/build/CMakeFiles/CMakeError.log".
[...]

Additional info:
* package version(s)
$ pacman -Qs libmariadbclient
local/libmariadbclient 10.1.12-1
MariaDB client libraries
$ pacman -Qs binutils
local/binutils 2.26-2 (base-devel)
A set of programs to assemble and manipulate binary and object files

Steps to reproduce:
recompile any binary that is getting linked to libmysqlclient.so.18, e.g. mysql-python (https://www.archlinux.org/packages/extra/x86_64/mysql-python/) using the current mariadb and binutils packages:
$ sudo abs
$ cp -r /var/abs/extra/mysql-python .
$ cd mysql-python
$ makepkg -sifCc
$ ldd -r /usr/lib/python2.7/site-packages/_mysql.so
linux-vdso.so.1 (0x00007fff1d1b4000)
libmysqlclient.so.18 => /usr/lib/libmysqlclient.so.18 (0x00007fce9f481000)
libpython2.7.so.1.0 => /usr/lib/libpython2.7.so.1.0 (0x00007fce9f0a8000)
libpthread.so.0 => /usr/lib/libpthread.so.0 (0x00007fce9ee8b000)
libc.so.6 => /usr/lib/libc.so.6 (0x00007fce9eae9000)
libz.so.1 => /usr/lib/libz.so.1 (0x00007fce9e8d3000)
libssl.so.1.0.0 => /usr/lib/libssl.so.1.0.0 (0x00007fce9e658000)
libcrypto.so.1.0.0 => /usr/lib/libcrypto.so.1.0.0 (0x00007fce9e1df000)
libdl.so.2 => /usr/lib/libdl.so.2 (0x00007fce9dfdb000)
libm.so.6 => /usr/lib/libm.so.6 (0x00007fce9dcd6000)
libutil.so.1 => /usr/lib/libutil.so.1 (0x00007fce9dad2000)
/usr/lib64/ld-linux-x86-64.so.2 (0x000055bba1252000)
symbol mysql_fetch_row, version libmysqlclient_16 not defined in file libmysqlclient.so.18 with link time reference (/usr/lib/python2.7/site-packages/_mysql.so)
symbol mysql_stat, version libmysqlclient_16 not defined in file libmysqlclient.so.18 with link time reference (/usr/lib/python2.7/site-packages/_mysql.so)
symbol mysql_get_server_info, version libmysqlclient_16 not defined in file libmysqlclient.so.18 with link time reference (/usr/lib/python2.7/site-packages/_mysql.so)
symbol mysql_get_host_info, version libmysqlclient_16 not defined in file libmysqlclient.so.18 with link time reference (/usr/lib/python2.7/site-packages/_mysql.so)
symbol mysql_fetch_lengths, version libmysqlclient_16 not defined in file libmysqlclient.so.18 with link time reference (/usr/lib/python2.7/site-packages/_mysql.so)
symbol mysql_info, version libmysqlclient_16 not defined in file libmysqlclient.so.18 with link time reference (/usr/lib/python2.7/site-packages/_mysql.so)
symbol mysql_dump_debug_info, version libmysqlclient_16 not defined in file libmysqlclient.so.18 with link time reference (/usr/lib/python2.7/site-packages/_mysql.so)
symbol mysql_commit, version libmysqlclient_16 not defined in file libmysqlclient.so.18 with link time reference (/usr/lib/python2.7/site-packages/_mysql.so)
symbol mysql_get_client_info, version libmysqlclient_16 not defined in file libmysqlclient.so.18 with link time reference (/usr/lib/python2.7/site-packages/_mysql.so)
symbol mysql_thread_id, version libmysqlclient_16 not defined in file libmysqlclient.so.18 with link time reference (/usr/lib/python2.7/site-packages/_mysql.so)
symbol mysql_num_rows, version libmysqlclient_16 not defined in file libmysqlclient.so.18 with link time reference (/usr/lib/python2.7/site-packages/_mysql.so)
symbol mysql_free_result, version libmysqlclient_16 not defined in file libmysqlclient.so.18 with link time reference (/usr/lib/python2.7/site-packages/_mysql.so)
symbol mysql_fetch_fields, version libmysqlclient_16 not defined in file libmysqlclient.so.18 with link time reference (/usr/lib/python2.7/site-packages/_mysql.so)
symbol mysql_next_result, version libmysqlclient_16 not defined in file libmysqlclient.so.18 with link time reference (/usr/lib/python2.7/site-packages/_mysql.so)
symbol mysql_row_tell, version libmysqlclient_16 not defined in file libmysqlclient.so.18 with link time reference (/usr/lib/python2.7/site-packages/_mysql.so)
symbol mysql_real_escape_string, version libmysqlclient_16 not defined in file libmysqlclient.so.18 with link time reference (/usr/lib/python2.7/site-packages/_mysql.so)
symbol mysql_debug, version libmysqlclient_16 not defined in file libmysqlclient.so.18 with link time reference (/usr/lib/python2.7/site-packages/_mysql.so)
symbol mysql_data_seek, version libmysqlclient_16 not defined in file libmysqlclient.so.18 with link time reference (/usr/lib/python2.7/site-packages/_mysql.so)
symbol mysql_init, version libmysqlclient_16 not defined in file libmysqlclient.so.18 with link time reference (/usr/lib/python2.7/site-packages/_mysql.so)
symbol mysql_change_user, version libmysqlclient_16 not defined in file libmysqlclient.so.18 with link time reference (/usr/lib/python2.7/site-packages/_mysql.so)
symbol mysql_warning_count, version libmysqlclient_16 not defined in file libmysqlclient.so.18 with link time reference (/usr/lib/python2.7/site-packages/_mysql.so)
symbol mysql_real_query, version libmysqlclient_16 not defined in file libmysqlclient.so.18 with link time reference (/usr/lib/python2.7/site-packages/_mysql.so)
symbol mysql_close, version libmysqlclient_16 not defined in file libmysqlclient.so.18 with link time reference (/usr/lib/python2.7/site-packages/_mysql.so)
symbol mysql_get_proto_info, version libmysqlclient_16 not defined in file libmysqlclient.so.18 with link time reference (/usr/lib/python2.7/site-packages/_mysql.so)
symbol mysql_rollback, version libmysqlclient_16 not defined in file libmysqlclient.so.18 with link time reference (/usr/lib/python2.7/site-packages/_mysql.so)
symbol mysql_server_init, version libmysqlclient_16 not defined in file libmysqlclient.so.18 with link time reference (/usr/lib/python2.7/site-packages/_mysql.so)
symbol mysql_ssl_set, version libmysqlclient_16 not defined in file libmysqlclient.so.18 with link time reference (/usr/lib/python2.7/site-packages/_mysql.so)
symbol mysql_affected_rows, version libmysqlclient_16 not defined in file libmysqlclient.so.18 with link time reference (/usr/lib/python2.7/site-packages/_mysql.so)
symbol mysql_num_fields, version libmysqlclient_16 not defined in file libmysqlclient.so.18 with link time reference (/usr/lib/python2.7/site-packages/_mysql.so)
Comment by Doug Newgard (Scimmia) - Tuesday, 01 March 2016, 23:00 GMT
I'm thinking this has to be a local problem. /usr/lib/python2.7/site-packages/_mysql.so from the repo has no version references outside of GLIBC.

Edit: nevermind, objdump mislead me here.
Comment by Doug Newgard (Scimmia) - Tuesday, 01 March 2016, 23:20 GMT
Can you give us the output of `readelf --dyn-syms /usr/lib/libmysqlclient.so.18 | grep mysql_fetch_row`?

In mine, the symbols exist. I am seeing the issue described in the binutils bug report about two symbols both being default, but I don't get the errors from ldd that you do.
Comment by lance (lance) - Wednesday, 02 March 2016, 02:32 GMT
# pacman -Qs mariadb
local/libmariadbclient 10.1.12-1
MariaDB client libraries
local/mariadb 10.1.12-1
Fast SQL database server, drop-in replacement for MySQL
local/mariadb-clients 10.1.12-1
MariaDB client tools
#
# /root/.gem/ruby/2.1.0/bin/bundle exec rspec --tag type:model
ruby: relocation error: /usr/lib/ruby/gems/2.1.0/extensions/x86_64-linux/2.1.0/mysql2-0.3.18/mysql2/mysql2.so: symbol mysql_get_client_info, version libmysqlclient_16 not defined in file libmysqlclient.so.18 with link time reference
#
# ldd -r /usr/lib/ruby/gems/2.1.0/extensions/x86_64-linux/2.1.0/mysql2-0.3.18/mysql2/mysql2.so
linux-vdso.so.1 (0x00007ffdbcffd000)
libruby.so.2.1 => /usr/lib/libruby.so.2.1 (0x00007f9e41ad6000)
libmysqlclient.so.18 => /usr/lib/libmysqlclient.so.18 (0x00007f9e41574000)
libpthread.so.0 => /usr/lib/libpthread.so.0 (0x00007f9e41357000)
libc.so.6 => /usr/lib/libc.so.6 (0x00007f9e40fb4000)
libgmp.so.10 => /usr/lib/libgmp.so.10 (0x00007f9e40d3c000)
libdl.so.2 => /usr/lib/libdl.so.2 (0x00007f9e40b38000)
libcrypt.so.1 => /usr/lib/libcrypt.so.1 (0x00007f9e40900000)
libm.so.6 => /usr/lib/libm.so.6 (0x00007f9e405fb000)
/usr/lib64/ld-linux-x86-64.so.2 (0x0000562bc739e000)
libz.so.1 => /usr/lib/libz.so.1 (0x00007f9e403e5000)
libssl.so.1.0.0 => /usr/lib/libssl.so.1.0.0 (0x00007f9e40169000)
libcrypto.so.1.0.0 => /usr/lib/libcrypto.so.1.0.0 (0x00007f9e3fcf1000)
symbol mysql_fetch_row, version libmysqlclient_16 not defined in file libmysqlclient.so.18 with link time reference (/usr/lib/ruby/gems/2.1.0/extensions/x86_64-linux/2.1.0/mysql2-0.3.18/mysql2/mysql2.so)
symbol mysql_get_server_info, version libmysqlclient_16 not defined in file libmysqlclient.so.18 with link time reference (/usr/lib/ruby/gems/2.1.0/extensions/x86_64-linux/2.1.0/mysql2-0.3.18/mysql2/mysql2.so)
symbol mysql_fetch_lengths, version libmysqlclient_16 not defined in file libmysqlclient.so.18 with link time reference (/usr/lib/ruby/gems/2.1.0/extensions/x86_64-linux/2.1.0/mysql2-0.3.18/mysql2/mysql2.so)
symbol mysql_info, version libmysqlclient_16 not defined in file libmysqlclient.so.18 with link time reference (/usr/lib/ruby/gems/2.1.0/extensions/x86_64-linux/2.1.0/mysql2-0.3.18/mysql2/mysql2.so)
symbol mysql_get_client_info, version libmysqlclient_16 not defined in file libmysqlclient.so.18 with link time reference (/usr/lib/ruby/gems/2.1.0/extensions/x86_64-linux/2.1.0/mysql2-0.3.18/mysql2/mysql2.so)
symbol mysql_thread_id, version libmysqlclient_16 not defined in file libmysqlclient.so.18 with link time reference (/usr/lib/ruby/gems/2.1.0/extensions/x86_64-linux/2.1.0/mysql2-0.3.18/mysql2/mysql2.so)
symbol mysql_num_rows, version libmysqlclient_16 not defined in file libmysqlclient.so.18 with link time reference (/usr/lib/ruby/gems/2.1.0/extensions/x86_64-linux/2.1.0/mysql2-0.3.18/mysql2/mysql2.so)
symbol mysql_free_result, version libmysqlclient_16 not defined in file libmysqlclient.so.18 with link time reference (/usr/lib/ruby/gems/2.1.0/extensions/x86_64-linux/2.1.0/mysql2-0.3.18/mysql2/mysql2.so)
symbol mysql_fetch_fields, version libmysqlclient_16 not defined in file libmysqlclient.so.18 with link time reference (/usr/lib/ruby/gems/2.1.0/extensions/x86_64-linux/2.1.0/mysql2-0.3.18/mysql2/mysql2.so)
symbol mysql_next_result, version libmysqlclient_16 not defined in file libmysqlclient.so.18 with link time reference (/usr/lib/ruby/gems/2.1.0/extensions/x86_64-linux/2.1.0/mysql2-0.3.18/mysql2/mysql2.so)
symbol mysql_real_escape_string, version libmysqlclient_16 not defined in file libmysqlclient.so.18 with link time reference (/usr/lib/ruby/gems/2.1.0/extensions/x86_64-linux/2.1.0/mysql2-0.3.18/mysql2/mysql2.so)
symbol mysql_init, version libmysqlclient_16 not defined in file libmysqlclient.so.18 with link time reference (/usr/lib/ruby/gems/2.1.0/extensions/x86_64-linux/2.1.0/mysql2-0.3.18/mysql2/mysql2.so)
symbol mysql_send_query, version libmysqlclient_16 not defined in file libmysqlclient.so.18 with link time reference (/usr/lib/ruby/gems/2.1.0/extensions/x86_64-linux/2.1.0/mysql2-0.3.18/mysql2/mysql2.so)
symbol mysql_warning_count, version libmysqlclient_16 not defined in file libmysqlclient.so.18 with link time reference (/usr/lib/ruby/gems/2.1.0/extensions/x86_64-linux/2.1.0/mysql2-0.3.18/mysql2/mysql2.so)
symbol mysql_close, version libmysqlclient_16 not defined in file libmysqlclient.so.18 with link time reference (/usr/lib/ruby/gems/2.1.0/extensions/x86_64-linux/2.1.0/mysql2-0.3.18/mysql2/mysql2.so)
symbol mysql_set_local_infile_handler, version libmysqlclient_16 not defined in file libmysqlclient.so.18 with link time reference (/usr/lib/ruby/gems/2.1.0/extensions/x86_64-linux/2.1.0/mysql2-0.3.18/mysql2/mysql2.so)
symbol mysql_server_init, version libmysqlclient_16 not defined in file libmysqlclient.so.18 with link time reference (/usr/lib/ruby/gems/2.1.0/extensions/x86_64-linux/2.1.0/mysql2-0.3.18/mysql2/mysql2.so)
symbol mysql_ssl_set, version libmysqlclient_16 not defined in file libmysqlclient.so.18 with link time reference (/usr/lib/ruby/gems/2.1.0/extensions/x86_64-linux/2.1.0/mysql2-0.3.18/mysql2/mysql2.so)
symbol mysql_affected_rows, version libmysqlclient_16 not defined in file libmysqlclient.so.18 with link time reference (/usr/lib/ruby/gems/2.1.0/extensions/x86_64-linux/2.1.0/mysql2-0.3.18/mysql2/mysql2.so)
symbol mysql_num_fields, version libmysqlclient_16 not defined in file libmysqlclient.so.18 with link time reference (/usr/lib/ruby/gems/2.1.0/extensions/x86_64-linux/2.1.0/mysql2-0.3.18/mysql2/mysql2.so)
#
# readelf --dyn-syms /usr/lib/libmysqlclient.so.18 | grep mysql_fetch_row
320: 000000000002d8d0 197 FUNC GLOBAL DEFAULT 12 mysql_fetch_row_start@@libmysqlclient_18
377: 0000000000029eb0 0 FUNC GLOBAL DEFAULT 12 mysql_fetch_row@@libmysqlclient_16
447: 000000000002d9a0 200 FUNC GLOBAL DEFAULT 12 mysql_fetch_row_cont@@libmysqlclient_18
490: 0000000000029eb0 592 FUNC GLOBAL DEFAULT 12 mysql_fetch_row@@libmysqlclient_18

Comment by Allan McRae (Allan) - Wednesday, 02 March 2016, 03:45 GMT
I thought I had pulled this fix, but our binutils build is from 24th of Feb and this was pulled on the 26th. I'll make a new build now.
Comment by Allan McRae (Allan) - Wednesday, 02 March 2016, 04:19 GMT
binutils rebuild with the bug fixed in [testing]. I assume mariabd needs a rebuild.

Loading...