2013-10-17 35 views
4

我运行一个名为“Senora”的开源项目,它是用perl编写的,并执行oracle数据库的东西。直到最近它还是用oracle的perl发行版运行。如何扩展二进制Perl分发

但最近我试图添加更多的功能,我需要LibXML。就我个人而言,我正在运行Strawberry Perl,添加LibXML没有任何问题。但是,我的用户没有他们的私人perls,他们必须与他们在机器上找到的任何东西一起生活(oracle perl总是在那里)。

我已经在我的Senora树中添加了一个lib目录,并在其中放置了一些普通的perl模块,这是perl不提供的。这工作。

但是,如何处理编译后的代码?我很想试着从我的草莓树上复制dll,但这种感觉很骇人听闻。毕竟这个代码不是针对oracle perl编译的。

我也很想给我的用户提供完整的草莓树。这很丑陋。

那么还有什么其他的选择,我必须添加“只是什么缺少”我的Senora发行版,所以它与Oracle的Perl运行?

+0

如果它的任何帮助,草莓便携式不需要安装也不特殊的系统权限,它可以安装DBD :: Oracle和便携性是普通的压缩/解压缩文件 –

+0

我只是不希望的告诉我的用户,为了运行Senora,他们还需要安装另一个perl。 –

+0

您可以将所有内容捆绑在一起并将它们提供给zip文件。 :)最后,如果Java程序可以抱怨JRE,为什么Perl程序不能做到这一点? –

回答

0

但是,如何处理编译后的代码?安装在$特定拱目录

代码只能与相同版本的版本相同或更高版本的维护工作(例如,安装特定拱模块5.14.1安装将与5.14.2但不工作5.14 .0或5.16)。他们只能使用具有相同配置的Perl。除非你在他们的机器上控制Perl,否则这不太可能。

他们必须与任何发现机器

的生活可是你问如何添加到他们的机器。哪一个?

2

TL; DR:当每个人都有一个完整的perl安装时,通过CPAN分发Perl模块很有趣也很容易。对于任何其他用例,这很糟糕。

  • Perl程序通常通过CPAN分发,CPAN提供自动依赖关系安装。但是,某些模块需要安装工作C工具链。许多用户在没有这种能力的情况下运行损坏的perls。这里唯一的解决方案是打包预编译的文件,但是这必须分别为每个操作系统和每个perl配置完成。这是一些OS厂商(如Debian或RedHat)和一些Perl厂商(如ActiveState)所做的。

    这些供应商都提供了从Perl模块构建自己的软件包的说明,然后可以使用它们各自的软件包管理器来安装它们。

  • 如果目标系统确实有一个C工具链,然后使用cpan的安装是没有问题的 - 虽然local::lib应,如果你不上传的问题CPAN模块进行调查。

    请注意,GNOME libxml2未通过CPAN分发,必须通过其他方式获得。构建XML::LibXML模块也需要相应的头文件。

  • 您也可以使用包装工具,如PAR。这将为您的perl解释器,源文件和任何依赖项创建一个可执行文件。这些存档是,因为它们包含整个perl。正如你现在指定的perl版本,唯一剩下的变量是主机操作系统。请注意,这不会重复使用主机上的任何perl安装,并且必须自带一切。

+0

我有一个C工具链 - 这就是草莓Perl的全部内容。延伸草莓perl没有问题。操作系统也不是问题 - 它将始终是一个64位Windows。我的问题是,我的用户将拥有Oracle perl,我不知道如何扩展,我也不希望强制他们草莓perl。 –