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 の出力は上記同様使用するコマンドを表しています。