平台无关的Perl应用

最近由于项目需求,需要把再windows平台上运行的perl程序移植到Linux平台上。由于是第一次做类似的事情,结果折腾了很久,实在是无比痛苦啊。那种看着程序无法执行的感受真的是。。。。憋屈!

先说一下背景吧。原来实在windows上利用perl对STAF进行包装,做为整个automation框架中的一部分,主要用来负责控制机和SUT之间的远程通讯,控制等。现在需要把这套环境移植到Linux上。由于Linux的perl环境和windows有所不同,所以一直后肯定不能直接使用。需要做相应的调整。在这里我不想多说如何调整的,这在不同的环境中多少有所差异,我想说的其实是如何编写平台、安装路径无关的perl程序,尽可能减少平台移植的开销。

该项目是用Perl来调用STAF的函数完成远程控制等功能。所以这里涉及到几个和环境相关的因素。
1:Perl自身的执行环境
这点一般来说是不需要做什么改动。因为Linux系统一般都会自带Perl,环境变量中会把它的执行路径包括在内。但是如果你希望用自己的Perl程序而不是系统自带的,那么需要指定特定的Perl运行路径。
2:STAF的Lib库路径信息
该程序利用Perl来调用STAF的接口,所以一定要将STAF相关的PM文件,库文件的路径信息指定。其中Perl程序中需要调用STAF的PM文件时,可以利用
BEGIN {
push @INC, "/usr/local/staf/bin";
}将路径信息包含在内。
对于STAF相关的类库信息,可以通过设置PERLLIB或者PERL5LIB环境变量完成。
3:STAF的类库需要调用的其他类库信息
比如,libPLSTAF.so需要调用libSTAF.so等其他类库文件。但是这些类库文件不在系统的默认类库路径下。一种方法是把这些文件拷贝导系统默认路径下,如/usr/lib等。另一种方法是在/etc/ld.so.conf文件中加入“LD_LIBRARY_PATH=路径”这类的语句,但是这种方法需要修改到系统文件。改动最小的方法是在运行程序前,修改LD_LIBRARY_PATH,并且用export命令将其导出。这样在执行Perl程序的时候,就会把LD_LIBRARY_PATH中添加的路径作为库文件搜索路径。

下面以实际项目为例,我创建了一个test.sh的文件,在这个shell脚本的前面,设定和当前系统对应的环境变量,然后才执行相应的Perl程序,这样就做到了尽可能的平台无关。如果需要移植到另一个环境中,只要把整个开发包、脚本等拷贝到另一个平台上,然后修改相应的test.sh中的环境变量即可。
#!/bin/sh
PATH=/usr/local/staf/bin:$PATH
export PATH
LD_LIBRARY_PATH=/usr/local/staf/lib
export LD_LIBRARY_PATH
PERLLIB=/usr/local/staf/lib:/usr/local/staf/bin/:/usr/local/staf/lib/perl58/
export PERLLIB
CLASSPATH=/usr/local/staf/lib/JSTAF.jar:/usr/local/staf/samples/demo/STAFDemo.jar
export CLASSPATH
STAFCONVDIR=/usr/local/staf/codepage
export STAFCONVDIR
perl /usr/local/staf/bin/test.pl


这里只是很简单的多平台应用的一个例子,我相信会有其他很多更复杂的应用啦。不过针对本身就是跨平台的脚本类程序,这种方法应该是比较常用和方便的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值