4

我运行了一个名为“Senora”的开源项目,它是用 perl 编写的,并且做 oracle 数据库的东西。直到最近,它与 oracle 附带的 perl 发行版一起开箱即用。

但最近我尝试添加更多功能,我需要 LibXML。就我个人而言,我在工作中运行 Strawberry perl,添加 LibXML 没有问题。然而,我的用户没有他们的个人 perl,他们必须使用他们在机器上找到的任何东西(oracle perl 总是在那里)。

我已经在我的 Senora 树中添加了一个 lib 目录,并在其中放置了一些普通的 perl 模块,而 oracle perl 没有提供这些模块。这行得通。

但是我该如何处理已编译的代码?我很想从我的草莓树中复制 dll,但这感觉很骇人听闻。毕竟这些代码不是针对 oracle perl 编译的。

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

那么我还有什么其他选项可以在我的 Senora 发行版中添加“缺少的东西”,以便它与 oracle perl 一起运行?

4

2 回答 2

2

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

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

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

  • 如果目标系统确实有一个 C 工具链,那么cpan用于安装是没有问题的——尽管local::lib如果您没有将相关模块上传到 CPAN,则应该进行调查。

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

  • 您还可以使用打包工具,例如PAR. 这将使用您的 perl 解释器、源文件和任何依赖项创建一个可执行存档。这些档案很大,因为它们包含一个整体perl。当您现在指定 perl 版本时,唯一剩下的变量是主机操作系统。请注意,这不会重用主机上的任何 perl 安装,并且必须自己带来所有内容。

于 2013-10-17T15:18:52.033 回答
0

但是我该如何处理已编译的代码?

安装在 $arch 特定目录中的代码仅适用于相同版本或相同版本中的更高维护版本(例如,随 5.14.1 安装的特定于 arch 的模块将适用于 5.14.2,但不适用于 5.14.0 或 5.16。) . 它们只适用于具有相同配置的 Perl。除非您在他们的机器上控制 Perl,否则这不太可能奏效。

他们必须忍受他们在机器上找到的任何东西

然而你问如何添加到他们的机器。哪一个?

于 2013-10-17T13:29:33.413 回答