無料PHPプログラム

MySQL 5.1 リファレンスマニュアル :: 2 MySQL のインストールと更新 :: 2.15 Perl のインストールに関する注釈 :: 2.15.3 Perl DBI/DBD インターフェースを使用した際の問題
« 2.15.2 Windows に ActiveState Perl をインストールする

3 MySQL プログラムの使用 »
Section Navigation      [Toggle]
  • 2.15 Perl のインストールに関する注釈
  • 2.15.1 Unix に Perl をインストールする
  • 2.15.2 Windows に ActiveState Perl をインストールする
  • 2.15.3 Perl DBI/DBD インターフェースを使用した際の問題

2.15.3. Perl DBI/DBD インターフェースを使用した際の問題

Perl が ../mysql/mysql.so モジュールを見つけることができない場合、その問題は多分 Perl が libmysqlclient.so 共有ライブラリの場所が分からないためです。この問題は以下のメソッドの一つで解決できるはずです。

  • DBD::mysql ディストリビューションをperl Makefile.PL の代わりに perl Makefile.PL -static -config でコンパイルします。

  • 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'

-L/usr/lib/gcc-lib/...-lgcc をリンク コマンドに mysql.so ライブラリがビルドされた時に追加します (make の出力を mysql.so に対し Perl のクライアントをコンパイルした時にチェックします)。-L オプションはシステム上の libgcc.a があるディレクトリのパス名を指定します。

この問題の別の原因は Perl および MySQL が両方とも gcc でコンパイルされていない場合です。.この場合、このミスマッチをその両方とも gcc でコンパイルすることで解決できます。

テストを実施した時に以下の DBD::mysql のエラーが表示される場合があります。

t/00base............install_driver(mysql) failed:
Can't load '../blib/arch/auto/DBD/mysql/mysql.so' for module DBD::mysql:
../blib/arch/auto/DBD/mysql/mysql.so: undefined symbol:
uncompress at /usr/lib/perl5/5.00503/i586-linux/DynaLoader.pm line 169.

このことは -lz 圧縮ライブラリをリンク行に含める必要があることを意味しています。それは lib/DBD/mysql/Install.pm のファイルに以下の行を変更することでできます。

$sysliblist .= " -lm";

行を以下に変更します。

$sysliblist .= " -lm -lz";

変更した後に、make realclean を必ず実行して次にインストールはじめから実施します。

SCO に DBI をインストールするには DBI-xxx の Makefile および各サブディレクトリを編集する必要があります。以下は gcc 2.95.2 あるいはそれ以降を想定したものです。

OLD:                                  NEW:
CC = cc                               CC = gcc
CCCDLFLAGS = -KPIC -W1,-Bexport       CCCDLFLAGS = -fpic
CCDLFLAGS = -wl,-Bexport              CCDLFLAGS =

LD = ld                               LD = gcc -G -fpic
LDDLFLAGS = -G -L/usr/local/lib       LDDLFLAGS = -L/usr/local/lib
LDFLAGS = -belf -L/usr/local/lib      LDFLAGS = -L/usr/local/lib

LD = ld                               LD = gcc -G -fpic
OPTIMISE = -Od                        OPTIMISE = -O1

OLD:
CCCFLAGS = -belf -dy -w0 -U M_XENIX -DPERL_SCO5 -I/usr/local/include

NEW:
CCFLAGS = -U M_XENIX -DPERL_SCO5 -I/usr/local/include

これらの変更は Perl dynaloader が DBI モジュールをそれらが icc あるいは cc でコンパイルされた場合はロードしないために必要です。

動的リンク (SCO など) をサポートしていないシステムで Perl のモジュールを使用する場合、DBI および DBD::mysql を含む Perl の静的バージョンを生成できます。これを可能にするには Perl のバージョンをリンクした DBI コードで生成しそれを現在の Perl の先頭にインストールします。次にそれを使用して新たにリンクされた DBD コードを持つ Perl のバージョンをビルドし、それをインストールします。

SCO では、以下の環境変数が設定されている必要があります。

LD_LIBRARY_PATH=/lib:/usr/lib:/usr/local/lib:/usr/progressive/lib

または

LD_LIBRARY_PATH=/usr/lib:/lib:/usr/local/lib:/usr/ccs/lib:\
    /usr/progressive/lib:/usr/skunk/lib
LIBPATH=/usr/lib:/lib:/usr/local/lib:/usr/ccs/lib:\
    /usr/progressive/lib:/usr/skunk/lib
MANPATH=scohelp:/usr/man:/usr/local1/man:/usr/local/man:\
    /usr/skunk/man:

最初に、DBI ディストリビューションがあるディレクトリのこれらのコマンド実行して静的にリンクした DBI モジュールを含む Perl を作成します。

shell> perl Makefile.PL -static -config
shell> make
shell> make install
shell> make perl

次に新しい Perl をインストールします。make perl の出力がインストールの実施に必要な正確な make コマンドです。SCO では、これは make -f Makefile.aperl inst_perl MAP_TARGET=perl です。

次に、上記で作成した Perl を使用して DBD::mysql ディストリビューションがあるディレクトリのこれらのコマンド使用して同様に静的にリンクした DBD::mysql を含む別の Perl を作成します。

shell> perl Makefile.PL -static -config
shell> make
shell> make install
shell> make perl

最後に、この新しい Perl をインストールします。make perl の出力は上記同様使用するコマンドを表しています。

Copyright c 1997, 2010, Oracle and/or its affiliates. All rights reserved. Legal Notices
Top / Previous / Next / Up / Table of Contents
© 2010, Oracle Corporation and/or its affiliates

無料CGI PHPスクリプト | 新着情報スクリプト | 営業日カレンダー | PHPマニュアル | MySQLマニュアル | PEARマニュアル

Copyright (c) 2010 jmcodex.com All rights reserved.