我正在尝试将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链接起来有什么必要?
答案 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_FLAGS
和DCMAKE_C_FLAGS
,如果它们包含以冒号分隔的路径列表(当它们只包含一条路径时使用这些选项)。
我通过直接在MySQL根目录的CMakeLists.txt
中设置冒号分隔的路径列表来解决这个问题。