Perl が ../mysql/mysql.so
モジュールを見つけることができない場合、問題はおそらく Perl が libmysqlclient.so
共有ライブラリの場所がわからないことです。 この問題は次の方法のいずれかで解決できるはずです。
libmysqlclient.so
をほかの共有ライブラリがある (おそらく/usr/lib
あるいは/lib
) ディレクトリにコピーします。DBD::mysql
のコンパイルに使用される-L
オプションを、libmysqlclient.so
の実際の場所を反映するように変更します。Linux では、
libmysqlclient.so
があるディレクトリのパス名を/etc/ld.so.conf
ファイルに追加できます。libmysqlclient.so
があるディレクトリのパス名をLD_RUN_PATH
環境変数に追加します。 システムの中にはLD_LIBRARY_PATH
を使用しているものもあります。
リンカーが見つけられないほかのライブラリがある場合も、-L
オプションを変更する必要がある場合があります。 たとえば、libc
が /lib
にあり、リンクコマンドが -L/usr/lib
を指定しているためにリンカーがそれを見つけられない場合、-L
オプションを -L/lib
に変更するかあるいは -L/lib
を既存のリンクコマンドに追加します。
DBD::mysql
から次のエラーが表示された場合、おそらく gcc (あるいは gcc でコンパイルされた旧バイナリ) を使用しているでしょう。
/usr/bin/perl: can't resolve symbol '__moddi3'
/usr/bin/perl: can't resolve symbol '__divdi3'
mysql.so
ライブラリがビルドされるときに、-L/usr/lib/gcc-lib/... -lgcc
をリンクコマンドに追加します (Perl クライアントのコンパイル時に、make の出力で mysql.so
を確認します)。 -L
オプションは、システム上の libgcc.a
があるディレクトリのパス名を指定するようにしてください。
この問題の別の原因は Perl および MySQL が両方とも gcc でコンパイルされていない場合です。 この場合、両方を gcc でコンパイルすることでこの不一致を解決できます。