MySQL 8.0 リファレンスマニュアル


2.13.3 Perl DBI/DBD インタフェース使用の問題

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 でコンパイルすることでこの不一致を解決できます。


関連キーワード:  インストール, 起動, ソース, パッケージ, 確認, サーバー, ディレクトリ, コンパイル, 一般, Installer