如果 Perl 报告它不能找到../mysql/mysql.so
模块,那么问题可能是该Perl不能找到共享库文件“libmysqlclient.so”。
你可用下列任何一个方法修正它这:
- 用
perl Makefile.PL -static
而非perl Makefile.PL
编译Msql-Mysql-modules
分发。 - 拷贝
libmysqlclient.so
到其他共享库文件所在的目录(可能是“/usr/lib”或“/lib”)。 - 在
Linux
上,你可以把libmysqlclient.so
所在目录的路径名加到“/etc/ld.so.conf”文件中。 - 把
libmysqlclient.so
所在目录的路径名加到LD_RUN_PATH
环境变量中。
如果你从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
编译以解决不匹配。
如果你想要在一个不支持动态链接(象SCO那样)的系统上使用Perl模块,你可以产生包括DBI
和DBD-mysql
的Perl的一个静态版本。这种运行方法是你生成一个链接了DBI
代码的Perl版本并在最新的Perl上安装它,然后你使用它来构造附加链接了DBD
代码的Perl版本,并且安装它。
在 SCO 上,你必须有下列环境变量设置:
shell> LD_LIBRARY_PATH=/lib:/usr/lib:/usr/local/lib:/usr/progressive/lib 或 shell> LD_LIBRARY_PATH=/usr/lib:/lib:/usr/local/lib:/usr/ccs/lib:/usr/progressive/lib:/usr/skunk/lib shell> LIBPATH=/usr/lib:/lib:/usr/local/lib:/usr/ccs/lib:/usr/progressive/lib:/usr/skunk/lib shell> MANPATH=scohelp:/usr/man:/usr/local1/man:/usr/local/man:/usr/skunk/man:
首先, 在DBI
分发所在目录下运行下列命令,创造包括一个静态链接的Perl DBI
:
shell> perl Makefile.PL LINKTYPE=static shell> make shell> make install shell> make perl
然后你必须安装新的Perl。make perl
的输出将显示正确的你需要执行施行安装的make
的命令。在SCO上,是make -f Makefile.aperl inst_perl MAP_TARGET=perl
.
接下来,在Msql-Mysql-modules
分发所在目录下,使用刚才创建的Perl来创建同样包括一个静态链接的PerlDBD::mysql
的另一个Perl:
shell> perl Makefile.PL LINKTYPE=static shell> make shell> make install shell> make perl
最后, 你应该安装这个新的Perl。而且,make perl
的输出指出使用的命令。