出现编译错误 Can not load Mysql.pm in @INC

Posted

技术标签:

【中文标题】出现编译错误 Can not load Mysql.pm in @INC【英文标题】:Getting compilation error Can not load Mysql.pm in @INC 【发布时间】:2022-01-23 21:04:02 【问题描述】:

我正在使用安装了 perl v5.26.0 的 RHEL 8 服务器。在我的项目中,有很多使用 mysql.pm 的遗留 perl 模块,如下所示。

require 5.004;
require Exporter;
use Mysql;

在编译这些模块时,我遇到了类似的错误,

Can't locate Mysql.pm in @INC (you may need to install the Mysql module) (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5)

我已经安装了 DBD::mysql 和 mysql-devel。

yum install mysql-devel
DBD::mysql through cpan.

如果我将导入从 Mysql 更改为 DBI,编译器不会报错。因此,从测试的角度来看,现在更改所有遗留模块既费时又冒险。

有什么办法可以将 perl 版本降级到 v5.16 或以下?非常感谢其他建议。

【问题讨论】:

"有没有办法将 perl 版本降级到 v5.16 或以下" 你应该可以使用perlbrew 安装旧版本,如 5.12,请参阅例如this答案 DBD::mysql 不是Mysql。我不知道Mysql 是什么,但它不在 CPAN 上,也不属于 Perl。它是与脚本安装在同一目录中的模块吗?如果是这样,则此问题与this one 重复 通过 perlbrew 时,它会在 root 中打开一个新的 shell。但是我的 perl 脚本将由 apache httpd 通过 CGI 执行。 @PrashantaKumarPal 我认为 apache 使用 shebang 行来选择它将使用的 perl,请参阅 this 参考。可以尝试修改shebang为perlbrew安装perl的绝对路径吗? 【参考方案1】:

MysqlDBI 之前的日子里是一个非常古老的 MySQL 数据库接口。它与DBI::mysql 完全没有联系。 last version on CPAN 是二十多年前的事了。

您可以尝试在您的服务器上安装该 CPAN 发行版(但老实说,CPAN Testers results 看起来并不令人鼓舞)。

您最好的选择(是的,这可能需要一些工作)是重写您的代码以改用 DBI::mysql。也许您可以在名为 Mysql 的模块中编写自己的 shim,该模块将旧的 Mysql 样式调用转换为 DBI::mysql 调用。

【讨论】:

以上是关于出现编译错误 Can not load Mysql.pm in @INC的主要内容,如果未能解决你的问题,请参考以下文章

Fedora13下编译busybox-1.15.0出现can not find lcrypt错误

网站出现Mysql version can not be less than 4.1怎么办

keil4一调试就出现错误提示:could not load file...AXF.debugger aborted.请问到底是哪里出了问题?

[原]使用SevenZipSharp出现“Can not load 7-zip library or internal COM error! Message: DLL file does

由于“Module not found: Error: Can't resolve”错误,Webpack 突然无法编译

qt5.8 链接mysql错误:driver not load