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 进行编译,从而解决不匹配问题。