Uploaded image for project: 'MariaDB Server'
  1. MariaDB Server
  2. MDEV-5027

Allow tokudb-engine to be used with RHEL6/CentOS6

    Details

    • Type: Task
    • Status: Closed
    • Priority: Minor
    • Resolution: Fixed
    • Fix Version/s: 5.5.36, 5.5.37
    • Component/s: None
    • Labels:

      Description

      ha_tokudb.so requires GLIBC_2.14

      # ldd ha_tokudb.so
      ./ha_tokudb.so: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by ./ha_tokudb.so)
      

      It appears the problem is related to handlersocket requiring GCC4.7...

      https://groups.google.com/forum/#!msg/tokudb-user/TB6DZDVCq-g/lNvQ2kdbtP8J

      Thank you for your great work.

        Gliffy Diagrams

          Attachments

            Issue Links

              Activity

              Hide
              thatsafunnyname Peter (Stig) Edwards added a comment - - edited

              With mariadb-5.5.33.tar.gz src on RHEL6.3, using cmake 2.8.11.2 (2.8.9 needed by storage/tokudb/CMakeLists.txt) and gcc 4.8.1 (built using GNU SRC - http://www.gnu.org/software/gsrc/), adding the bin dirs for these to PATH and gcc lib dirs to LD_LIBRARY_PATH,

              and with "-flto -fuse-linker-plugin" removed from CMAKE_MODULE_LINKER_FLAGS_RELEASE in storage/tokudb/CMakeLists.txt
              and "-fuse-linker-plugin" removed from storage/tokudb/ft-index/cmake_modules/TokuSetupCompiler.cmake (I did not try using --fwhole-program)

              I can compile, link and pass all "make test" tests with:

              cmake . -DCMAKE_CXX_COMPILER=/path/to/gcc_4_8_1/bin/c++
              make test

              When running the mariadb 5.5.33 bintar package built by "make package" on RHEL6.3 after disabling transparent hugepage support:

              INSTALL SONAME 'ha_tokudb';
              Query OK, 0 rows affected (0.09 sec)

              INSTALL PLUGIN handlersocket SONAME 'handlersocket.so';
              ERROR 1126 (HY000): Can't open shared library '<removed>mariadb-5.5.33-linux-x86_64/lib/plugin/handlersocket.so' (errno: 2 /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.15' not found (required by <removed>mariadb-5.5.33-linux-x86_64/lib/p)

              If I set LD_LIBRARY_PATH in support-files/mysql.server to the location of the gcc 4.8.1 lib64 then:

              INSTALL PLUGIN handlersocket SONAME 'handlersocket.so';
              Query OK, 0 rows affected (0.00 sec)

              UPDATE:
              Link to https://github.com/Tokutek/mariadb/issues/6

              Show
              thatsafunnyname Peter (Stig) Edwards added a comment - - edited With mariadb-5.5.33.tar.gz src on RHEL6.3, using cmake 2.8.11.2 (2.8.9 needed by storage/tokudb/CMakeLists.txt) and gcc 4.8.1 (built using GNU SRC - http://www.gnu.org/software/gsrc/ ), adding the bin dirs for these to PATH and gcc lib dirs to LD_LIBRARY_PATH, and with "-flto -fuse-linker-plugin" removed from CMAKE_MODULE_LINKER_FLAGS_RELEASE in storage/tokudb/CMakeLists.txt and "-fuse-linker-plugin" removed from storage/tokudb/ft-index/cmake_modules/TokuSetupCompiler.cmake (I did not try using --fwhole-program) I can compile, link and pass all "make test" tests with: cmake . -DCMAKE_CXX_COMPILER=/path/to/gcc_4_8_1/bin/c++ make test When running the mariadb 5.5.33 bintar package built by "make package" on RHEL6.3 after disabling transparent hugepage support: INSTALL SONAME 'ha_tokudb'; Query OK, 0 rows affected (0.09 sec) INSTALL PLUGIN handlersocket SONAME 'handlersocket.so'; ERROR 1126 (HY000): Can't open shared library '<removed>mariadb-5.5.33-linux-x86_64/lib/plugin/handlersocket.so' (errno: 2 /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.15' not found (required by <removed>mariadb-5.5.33-linux-x86_64/lib/p) If I set LD_LIBRARY_PATH in support-files/mysql.server to the location of the gcc 4.8.1 lib64 then: INSTALL PLUGIN handlersocket SONAME 'handlersocket.so'; Query OK, 0 rows affected (0.00 sec) UPDATE: Link to https://github.com/Tokutek/mariadb/issues/6
              Hide
              colin Colin Charles added a comment -

              10.0.5 beta on RHEL6/CentOS6 also does not ship TokuDB! This on the other hand is available in Fedora 18 repository that we ship. Clearly we need to sync/fix this

              Show
              colin Colin Charles added a comment - 10.0.5 beta on RHEL6/CentOS6 also does not ship TokuDB! This on the other hand is available in Fedora 18 repository that we ship. Clearly we need to sync/fix this
              Hide
              prohaska7 Rich Prohaska added a comment -

              I build a debug version of mariadb-5.5.33a using gcc 4.7.1 on centos 6.2 and found the following problem: handlersocket.so has a dependency on GLIBCXX_3.4.15 which does not exist in /usr/lib64/libstdc+.so.6.0.13 but does exist in /usr/local/gcc-4.7/lib64/libstdc+.so.6.0.17. is this the cause of the build problem on CentOS 6?

              $ strings bin/mysqld | grep GLIBC
              GLIBC_2.3
              GLIBC_2.2.5
              GLIBCXX_3.4
              GLIBC_2.3.2

              $ strings lib/plugin/ha_tokudb.so | grep GLIBC
              GLIBC_2.2.5
              GLIBC_2.3
              GLIBCXX_3.4
              GLIBC_2.3.2

              $ strings lib/plugin/handlersocket.so | grep GLIBC
              GLIBC_2.2.5
              GLIBC_2.3.2
              GLIBCXX_3.4.15
              GLIBCXX_3.4

              $ strings /usr/lib64/libstdc++.so.6.0.13 | grep GLIBC
              GLIBCXX_3.4
              GLIBCXX_3.4.1
              GLIBCXX_3.4.2
              GLIBCXX_3.4.3
              GLIBCXX_3.4.4
              GLIBCXX_3.4.5
              GLIBCXX_3.4.6
              GLIBCXX_3.4.7
              GLIBCXX_3.4.8
              GLIBCXX_3.4.9
              GLIBCXX_3.4.10
              GLIBCXX_3.4.11
              GLIBCXX_3.4.12
              GLIBCXX_3.4.13
              GLIBC_2.2.5
              GLIBC_2.3
              GLIBC_2.4
              GLIBC_2.3.2

              $ strings /usr/local/gcc-4.7/lib64/libstdc++.so.6.0.17|grep GLIBC
              GLIBCXX_3.4
              GLIBCXX_3.4.1
              GLIBCXX_3.4.2
              GLIBCXX_3.4.3
              GLIBCXX_3.4.4
              GLIBCXX_3.4.5
              GLIBCXX_3.4.6
              GLIBCXX_3.4.7
              GLIBCXX_3.4.8
              GLIBCXX_3.4.9
              GLIBCXX_3.4.10
              GLIBCXX_3.4.11
              GLIBCXX_3.4.12
              GLIBCXX_3.4.13
              GLIBCXX_3.4.14
              GLIBCXX_3.4.15
              GLIBCXX_3.4.16
              GLIBCXX_3.4.17

              Show
              prohaska7 Rich Prohaska added a comment - I build a debug version of mariadb-5.5.33a using gcc 4.7.1 on centos 6.2 and found the following problem: handlersocket.so has a dependency on GLIBCXX_3.4.15 which does not exist in /usr/lib64/libstdc+ .so.6.0.13 but does exist in /usr/local/gcc-4.7/lib64/libstdc +.so.6.0.17. is this the cause of the build problem on CentOS 6? $ strings bin/mysqld | grep GLIBC GLIBC_2.3 GLIBC_2.2.5 GLIBCXX_3.4 GLIBC_2.3.2 $ strings lib/plugin/ha_tokudb.so | grep GLIBC GLIBC_2.2.5 GLIBC_2.3 GLIBCXX_3.4 GLIBC_2.3.2 $ strings lib/plugin/handlersocket.so | grep GLIBC GLIBC_2.2.5 GLIBC_2.3.2 GLIBCXX_3.4.15 GLIBCXX_3.4 $ strings /usr/lib64/libstdc++.so.6.0.13 | grep GLIBC GLIBCXX_3.4 GLIBCXX_3.4.1 GLIBCXX_3.4.2 GLIBCXX_3.4.3 GLIBCXX_3.4.4 GLIBCXX_3.4.5 GLIBCXX_3.4.6 GLIBCXX_3.4.7 GLIBCXX_3.4.8 GLIBCXX_3.4.9 GLIBCXX_3.4.10 GLIBCXX_3.4.11 GLIBCXX_3.4.12 GLIBCXX_3.4.13 GLIBC_2.2.5 GLIBC_2.3 GLIBC_2.4 GLIBC_2.3.2 $ strings /usr/local/gcc-4.7/lib64/libstdc++.so.6.0.17|grep GLIBC GLIBCXX_3.4 GLIBCXX_3.4.1 GLIBCXX_3.4.2 GLIBCXX_3.4.3 GLIBCXX_3.4.4 GLIBCXX_3.4.5 GLIBCXX_3.4.6 GLIBCXX_3.4.7 GLIBCXX_3.4.8 GLIBCXX_3.4.9 GLIBCXX_3.4.10 GLIBCXX_3.4.11 GLIBCXX_3.4.12 GLIBCXX_3.4.13 GLIBCXX_3.4.14 GLIBCXX_3.4.15 GLIBCXX_3.4.16 GLIBCXX_3.4.17
              Hide
              serg Sergei Golubchik added a comment -

              We avoid this issue in our CentOS6/x86-64 builder by compiling with gcc-4.7.3 (which is fine for TokuDB), but with libstdc++ that comes from gcc-4.4.6 (gcc version that comes with CentOS 6). So, our binaries and plugins (namely, handlersocket and oqgraph) don't have any dependency on newer libstdc++ symbols.

              Show
              serg Sergei Golubchik added a comment - We avoid this issue in our CentOS6/x86-64 builder by compiling with gcc-4.7.3 (which is fine for TokuDB), but with libstdc++ that comes from gcc-4.4.6 (gcc version that comes with CentOS 6). So, our binaries and plugins (namely, handlersocket and oqgraph) don't have any dependency on newer libstdc++ symbols.
              Hide
              serg Sergei Golubchik added a comment -

              need a different fix for 5.5.37 and 10.0.10, TokuDB 7.1.5 doesn't compile with libstdc++ from gcc-4.4.6

              Show
              serg Sergei Golubchik added a comment - need a different fix for 5.5.37 and 10.0.10, TokuDB 7.1.5 doesn't compile with libstdc++ from gcc-4.4.6
              Hide
              prohaska7 Rich Prohaska added a comment -

              we are using devtoolset-1.1 on centos 5 and centos 6 to build mariadb 5.5 and mariadb 10.0 with tokudb. devtoolset-1.1 includes gcc-4.7 but links to the systems libstdc++ library.

              Show
              prohaska7 Rich Prohaska added a comment - we are using devtoolset-1.1 on centos 5 and centos 6 to build mariadb 5.5 and mariadb 10.0 with tokudb. devtoolset-1.1 includes gcc-4.7 but links to the systems libstdc++ library.
              Hide
              serg Sergei Golubchik added a comment -

              Thanks. I didn't know that devtoolset-1.1 builds with system libstdc++ (how it can do it, I wonder?).
              If my current solution won't work, I'll try devtoolset.

              Show
              serg Sergei Golubchik added a comment - Thanks. I didn't know that devtoolset-1.1 builds with system libstdc++ (how it can do it, I wonder?). If my current solution won't work, I'll try devtoolset.
              Hide
              serg Sergei Golubchik added a comment -

              Solved by linking with a small static libstdc++extra.a library that has all new (with the version GLIBCXX_3.4.15) symbols.

              Show
              serg Sergei Golubchik added a comment - Solved by linking with a small static libstdc++extra.a library that has all new (with the version GLIBCXX_3.4.15 ) symbols.

                People

                • Assignee:
                  serg Sergei Golubchik
                  Reporter:
                  ampf Antonio Fernandes
                • Votes:
                  10 Vote for this issue
                  Watchers:
                  17 Start watching this issue

                  Dates

                  • Created:
                    Updated:
                    Resolved:

                    Time Tracking

                    Estimated:
                    Original Estimate - Not Specified
                    Not Specified
                    Remaining:
                    Remaining Estimate - 0 minutes
                    0m
                    Logged:
                    Time Spent - 1 day, 2 hours
                    1d 2h