2.13.3 使用 Perl DBI/DBD 接口的问题
如果 Perl 报告无法找到../mysql/mysql.so
模块,则可能是 Perl 无法找到libmysqlclient.so
共享库。您应该能够通过以下方法之一解决此问题:
-
将
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
选项。例如,如果链接器因为在/lib
中而找不到libc
,并且链接命令指定了-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
添加到链接命令中(在编译 PerlClient 端时,请检查 make 的输出为mysql.so
)。 -L
选项应指定系统上libgcc.a
所在目录的路径名。
造成此问题的另一个原因可能是 Perl 和 MySQL 均未使用 gcc 进行编译。在这种情况下,您可以使用 gcc 进行编译,从而解决不匹配问题。