4

这可能是一个多部分的问题。背景:我们有一个本地 (c++) 库,它是我们应用程序的一部分,我们已经设法使用 SWIG 为这个库生成一个 perl 包装器。我们现在想将这个 perl 模块作为我们应用程序的一部分进行分发。

我的第一个问题 - 我应该如何分发这个模块?有没有标准的方法来打包预先构建的 perl 模块?我知道 ActiveState 发行版有 ppm,但我还需要为 linux 系统分发它。我什至不确定分发需要哪些文件,但我猜它至少是 pm 和 so 文件。

我的下一个问题 - 看起来我可能需要为我想要支持的每个版本的 perl 构建我的模块项目。我怎么知道我应该为哪个 perl 版本构建?是否有任何标准指南......或者更好的方法来构建一个可以与多个版本的 perl 一起使用的包?

对不起,如果我的问题没有意义 - 我对 perl 的编译模块方面相当陌生。

澄清:底层编译源是专有的(封闭源),所以我不能只为包提供源代码和适当的制作工件。希望我能,但在这种情况下不会发生。因此,我需要一个合理的方案来为我的模块打包预构建的二进制文件。

4

2 回答 2

2

我负责 DBD::Informix,它是与 DBI(Perl 数据库接口)一起工作的 Perl 数据库驱动程序模块之一。用于连接到 IBM Informix Dynamic Server (IDS) 的底层库是专有的,但 DBD::Informix 代码本身不是。我在 CPAN 上分发该代码,就像任何其他 Perl 模块一样。人们可以下载该源代码,并且(假设他们在他们的机器上安装了 Informix ClientSDK - 以及 Perl 和 DBI 等),他们可以构建 DBD::Informix 以使用他们安装的 Perl。

我强烈建议你安排你的 Perl 接口代码以源代码形式提供,即使它接口的库是专有的。这允许人们使用他们拥有的任何版本的 Perl 安装代码 - 而无需您处理不一致的问题。

如果你仍然想提供二进制支持,你将不得不确定你想支持哪些平台,并在每个这样的平台上使用标准版本的 Perl 构建模块。这变得一团糟。您需要访问每台机器的实例。诚然,虚拟机使这变得更容易,但它仍然很繁琐,而且平台和版本的数量只会增加。但是你仍然需要支持那些不在他们的机器上使用标准版本 Perl 的人——这就是为什么 Perl 包装器接口需要以源代码的形式提供。

于 2010-03-21T06:45:54.830 回答
1

免责声明: 我几乎没有创建可以轻松安装的二进制包的经验。因此,我制作这篇文章 CW 是为了让其他人更容易添加他们的建议。

您应该以源代码形式提供分发,以便可以在根据该系统的具体情况定制的每个系统上对其进行编译。我真的很喜欢Module::Build为此目的。

对于 Windows 上的 ActiveState 用户,您可能需要四个或六个 PPM,具体取决于您是否要支持5.6. 将 32 位和 64 位版本打包为5.6,5.85.10. 使用mingw您可以安装的版本ppm来编译模块以保持二进制兼容性。

另一种选择是使用PAR::Packer并在 PAR 存档中分发您的应用程序。在这种情况下,PAR::WebStart可能有用,尽管我没有尝试过。不过,我过去在 PAR 档案方面取得了成功。

于 2010-03-05T18:14:08.660 回答