top
Loading...
2.13.3.使用PerlDBI/DBD接口的問題
2.13.3. 使用Perl DBI/DBD接口的問題

如果Perl報告它不能發現../mysql/mysql.so模塊,可能試因為Perl不能定位共享庫libmysqlclient.so

可以使用下面的方法修復該問題:

·         perl Makefile.PL -static -config而不要用perl Makefile.PL編譯DBD::mysql分發版。

·         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客戶端時檢查生成mysql.somake的輸出)-L選項應指定libgcc.a在系統中的安裝目錄的路徑名。

該問題的另一個原因是PerlMySQL沒有用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或更新版:

舊:                                 新:
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
 
舊:
CCCFLAGS = -belf -dy -w0 -U M_XENIX -DPERL_SCO5 -I/usr/local/include
 
新:
CCFLAGS = -U M_XENIX -DPERL_SCO5 -I/usr/local/include

這些更改是必需的,因為用icccc編譯的Perl動態裝載器不裝載DBI模塊。

如果你想要在不支持動態鏈接(例如 SCO)的系統中使用Perl模塊,可以生成一個包括DBIDBD::mysql的靜態版本的Perl。方法是生成一個用DBI代碼連接的Perl版本,并將它安裝到當前Perl的頂級目錄。然后構建一個含DBD代碼連接的Perl版本并安裝。

SCO中,必須將下面的環境變量設置為:

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

Or

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:

首先,在DBD分發版的安裝目錄運行下述命令來創建一個包括靜態連接的DBD模塊的Perl

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

然后必須安裝新的Perlmake perl的輸出表示安裝時需要執行的make命令。在SCO中,為make -f Makefile.aperl inst_perl MAP_TARGET=perl

然后,使用剛剛創建的Perl,在DBD::mysql分發版的安裝目錄運行下述命令來創建另一個Perl,應包括靜態連接的DBD::mysql

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

最后,應當安裝新的Perlmake perl輸出指示了使用的命令。

作者:mysql.com
來源:http://dev.mysql.com/doc/refman/5.1/zh/installing.html
北斗有巢氏 有巢氏北斗