我运行一个名为“Senora”的开源项目,它是用perl编写的,并且是oracle数据库的东西.直到最近它才开始使用oracle附带的perl发行版.
但最近我尝试添加更多功能,我需要LibXML.我个人在工作时运行Strawberry perl,添加LibXML没问题.但是,我的用户没有他们的个人perls,他们必须与他们在机器上找到的任何东西一起生活(oracle perl总是在那里).
我已经在我的Senora树中添加了一个lib目录,并在那里放了一些普通的perl模块,oracle perl没有提供.这有效.
但是我如何处理编译代码?我觉得很想从我的草莓树上复制dll,但这感觉很讨厌.在所有这些代码都没有针对oracle perl编译之后.
我也很想给我的用户提供完整的草莓树.这很难看.
那么还有什么其他选择可以在我的Senora发行版中添加“只是缺少什么”,所以它与oracle perl一起运行?
最佳答案 TL; DR:当每个人都有完整的perl安装时,通过CPAN分发Perl模块很有趣.对于任何其他用例,这很糟糕.
> Perl程序通常通过CPAN分发,CPAN提供自动依赖安装.但是,某些模块需要一个可用的C工具链进行安装.许多用户在没有这种能力的情况下运行残缺的perls.这里唯一的解决方案是打包预编译文件,但是必须为每个操作系统和每个perl配置单独完成.这是一些操作系统供应商(如Debian或RedHat)和一些Perl供应商(如ActiveState)所做的.
这些供应商中的每一个都提供了从Perl模块构建自己的包的说明,然后可以使用它们各自的包管理器进行安装.
>如果目标系统确实有C工具链,那么使用cpan进行安装是没有问题的 – 尽管如果您没有将相关模块上传到CPAN,则应调查local :: lib.
请注意,GNOME libxml2不是通过CPAN分发的,必须通过其他方式获得.构建XML :: LibXML模块还需要相应的头文件.
>您也可以使用像PAR这样的包装工具.这将使用perl解释器,源文件和任何依赖项创建可执行存档.这些档案很大,因为它们包含整个perl.正如您现在指定的perl版本一样,唯一剩下的变量是主机操作系统.请注意,这不会重用来自主机的任何perl安装,并且必须自带所有内容.