用不同的glibc链接MySQL

时间:2014-05-25 06:59:55

标签: mysql gcc glibc

我正在尝试将MySQL与不同的glibc链接,例如一个不同的pthread实现,实际上我认为我几天前做对了。 显然,我做了笔记并希望重现结果,但我无法正确联系,所以我一定忘记了一步。

我之前做的只是添加指向我的glibc的标志,并将默认的一秒添加到cmake命令。

GLIBC_FLAGS="-Wl,--rpath=/path/to/my/glibc/build/lib:/usr/lib/x86_64-linux-gnu:/lib/x86_64-linux-gnu -Wl,--dynamic-linker=/path/to/my/glibc/build/lib/ld-linux-x86-64.so.2

cmake \
    -DCMAKE_INSTALL_PREFIX=../install \
    .. \
    -DCMAKE_C_FLAGS="$GLIBC_FLAGS" \
    -DCMAKE_CXX_FLAGS="$GLIBC_FLAGS"

这些标志在构建简单的测试程序时起作用,但似乎不适用于MySQL,因为ldd报告了mysqld的默认glibc。

$ ldd install/bin/mysqld
    linux-vdso.so.1 =>  (0x00007fff14ffe000)
    libcrypt.so.1 => /lib/x86_64-linux-gnu/libcrypt.so.1 (0x00007f4f1c9bb000)
    libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f4f1c7b7000)
    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f4f1c599000)
    libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f4f1c295000)
    libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f4f1bf91000)
    libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f4f1bd7a000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f4f1b9b2000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f4f1cc13000)

我还尝试设置LD_LIBRARY_PATH并更改BUILD/scripts/mysql_config中的链接器标志和lib变量,但这些似乎都不起作用。

将MySQL与不同的glibc链接起来有什么必要?

2 个答案:

答案 0 :(得分:1)

  

ldd报告mysqld的默认glibc。

你应该信任ldd - 它使用默认加载器 - /lib64/ld-linux-x86-64.so.2 您已经编译了musqld要使用的加载程序。

相反,在GDB下运行mysqld并执行start,然后执行info shared。您可能会看到实际上您的glibc版本已实际加载。

答案 1 :(得分:-1)

内核更新后,cmake显然忽略了DCMAKE_CXX_FLAGSDCMAKE_C_FLAGS,如果它们包含以冒号分隔的路径列表(当它们只包含一条路径时使用这些选项)。

我通过直接在MySQL根目录的CMakeLists.txt中设置冒号分隔的路径列表来解决这个问题。