C++コンパイラとlibgcc_c.so、libstdc++.so
ビルドオプションのひとつであるCXXを何も指定しない場合、環境にも依ると思いますが、コンパイラにより生成されるmysqldバイナリが、libgcc_c.so、libstdc++.soにリンクする場合があります。CXXはC++コンパイラを指定するためのフラグです。
例えばこんな感じでビルドすると、、、
./configure --prefix=/usr/local/mysql && make && sudo make install
こんな感じでdynamic linkします。
mir@oss-amd:~/test/mysql-5.0.42/mysql-5.0.42-linux-x86_64/bin$ ldd mysqld librt.so.1 => /lib64/tls/librt.so.1 (0x0000003d97f00000) libdl.so.2 => /lib64/libdl.so.2 (0x0000003d94a00000) libpthread.so.0 => /lib64/tls/libpthread.so.0 (0x0000003d94e00000) libcrypt.so.1 => /lib64/libcrypt.so.1 (0x0000003d96800000) libnsl.so.1 => /lib64/libnsl.so.1 (0x0000003d96000000) libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x0000003d95600000) libm.so.6 => /lib64/tls/libm.so.6 (0x0000003d94800000) libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x0000003d95a00000) libc.so.6 => /lib64/tls/libc.so.6 (0x0000003d94500000) /lib64/ld-linux-x86-64.so.2 (0x0000003d94300000)
この場合、libstdc++.soとかlibgcc_c.soとかを入れていない環境だと、mysqldが起動できないことになります。他のライブラリは大抵の環境には最初から入っているので大丈夫(かも)。
これは、mysql.infoによると、C++コンパイラにデフォルトではg++が使用されてたことが原因のようです。
* If you are using `gcc' and don't have `libg++' or `libstdc++' installed, you can tell `configure' to use `gcc' as your C++ compiler: shell> CC=gcc CXX=gcc ./configure When you use `gcc' as your C++ compiler, it does not attempt to link in `libg++' or `libstdc++'. This may be a good thing to do even if you have those libraries installed. Some versions of them have caused strange problems for MySQL users in the past.
そこで以下のようにCXXを指定して(気分的についでにCCも)ビルドしてみます。
CC=gcc CXX=gcc ./configure --prefix=/usr/local/mysql && make && sudo make install
すると、以下のようにlibgcc_c.soおよびlibstdc++.soにはリンクしないようになります。
mir@oss-amd:~/test/mysql-5.0.42/mysql-5.0.42-linux-x86_64/bin$ ldd mysqld librt.so.1 => /lib64/tls/librt.so.1 (0x0000003d97f00000) libz.so.1 => /usr/lib64/libz.so.1 (0x0000003d94c00000) libdl.so.2 => /lib64/libdl.so.2 (0x0000003d94a00000) libpthread.so.0 => /lib64/tls/libpthread.so.0 (0x0000003d94e00000) libcrypt.so.1 => /lib64/libcrypt.so.1 (0x0000003d96800000) libnsl.so.1 => /lib64/libnsl.so.1 (0x0000003d96000000) libm.so.6 => /lib64/tls/libm.so.6 (0x0000003d94800000) libc.so.6 => /lib64/tls/libc.so.6 (0x0000003d94500000) /lib64/ld-linux-x86-64.so.2 (0x0000003d94300000)