如果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.so的make的輸出)。-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或更新版:
舊: 新:
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
這些更改是必需的,因為用icc或cc編譯的Perl動態裝載器不裝載DBI模塊。
如果你想要在不支持動態鏈接(例如 SCO)的系統中使用Perl模塊,可以生成一個包括DBI和DBD::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
然后必須安裝新的Perl。make 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
最后,應當安裝新的Perl。make perl的輸出指示了使用的命令。