我在Perl中开发了一个脚本,它使用了2个额外的库Net::SSH::Perl和Spreadsheet::WriteExcel,我在Debian笔记本电脑上使用CPAN
轻松安装了这些库。
Ultimatly,我的目标是在solaris服务器上部署此脚本。但是,此服务器未连接到Internet,因此无法自动安装缺少的依赖项。
到目前为止,我尝试使用PP,这允许我在另一台Ubuntu计算机上运行此脚本,而无需手动安装额外的库,但在Solaris上返回错误:Cannot find /lib64/ld-linux-x86-64.so.2
。
我怀疑这是由于两种体系结构之间存在差异,我在脚本中打包了一个包含所有依赖项的./lib
文件夹(./lib
是通过pp -B -p -o script.par myscript.pl
获取并提取生成./lib
文件夹)。
根据我在this question中找到的潜在客户,我在脚本开头尝试使用use lib "./lib
和BEGIN { unshift @INC, "lib"; }
,但我收到错误消息说我没有包含我运行它时的库。
有没有办法移植这些库?还有另一种方法吗?
答案 0 :(得分:2)
Net::SSH::Perl
依赖于多个XS模块,例如Math::GMP
,Math::Pari
等。在Solaris盒子上没有办法实际编译它们(如用C编译它们,而不是Perl)。
您还需要底层的C库(即libgmp,libpari)。 Math::Pari
构建脚本将下载其库,但您已指出在目标Solaris框中无法实现。
cpanm
可以帮助您下载Perl依赖项,以便将它们移动到目标计算机并在其上构建它们。
如果您的项目Makefile.PL
或cpanfile
中有正确的相关条目,则
cpanm --installdeps -L deps --save-dists dists .
项目目录中的devel机器上的(注意尾随点)会将所有依赖项下载到dists
目录中。
然后,您可以将该目录复制到目标Solaris框(以及cpanm
),并使用其cpanm
选项将其传递给--mirror
。
例如,我只针对Net::SSH::Perl
的依赖项执行此操作:
cpanm --installdeps -L deps --save-dists dists Net::SSH::Perl
它已将34个发行版下载并安装到deps
,并将归档保存在dists
中。
我可以通过以下方式使用下载的发行版构建Net::SSH::Perl
cpanm --mirror file://${PWD}/dists Net::SSH::Perl
请注意,虽然cpanm
很方便,但实际上并不需要它来安装所需的模块。您可以通过解压缩然后运行
perl Makefile.PL
make
make install
或
perl Build.PL
./Build
./Build install
适用于特定模块