我该如何分发一个预构建的Perl模块,我应该为哪个版本的Perl进行构建?

4
这可能是一个多部分问题。背景:我们有一个本地(c ++)库,是我们应用程序的一部分,我们已经成功利用SWIG生成了此库的Perl封装器。现在,我们希望将这个Perl模块作为我们应用程序的一部分进行分发。
我的第一个问题 - 我该如何分发这个模块?是否有一种标准的方式来打包预构建的Perl模块?我知道ActiveState distro中有ppm,但我还需要将其分发到Linux系统。我甚至不知道要分发哪些文件,但我猜最少需要pm和so文件。
我的下一个问题 - 看起来我可能需要为每个我想支持的perl版本构建我的模块项目。如何知道我应该为哪些perl版本构建?是否有任何标准指南...或者更好的办法是构建一个可以与多个Perl版本一起使用的软件包?
如果我的问题没有意义,对不起 - 我对Perl编译模块方面还比较新。
澄清:底层的编译源代码是专有的(闭源),因此我不能只是发送源代码和适当的制作工件以获取包。希望我能,但在这种情况下不会发生。因此,我需要一种合理的方案来打包预构建的二进制文件以供我的模块使用。

请参阅 http://stackoverflow.com/questions/2201637/need-good-resources-that-guide-through-the-process-of-creating-perl-modules-packa,其中包含有关创建Perl模块包的过程的良好资源。 - Ether
1
这有点不同 - 预编译的二进制分发与您标准的基于CPAN的分发方式不同。话虽如此,它是一个很好的资源。 - Robert P
2个回答

2
我负责管理DBD::Informix,这是一个与DBI(Perl数据库接口)一起使用的Perl数据库驱动程序模块之一。用于连接IBM Informix Dynamic Server(IDS)的底层库是专有的,但DBD::Informix代码本身不是。我像任何其他Perl模块一样在CPAN上分发该代码。人们可以下载源代码,并且(只要他们在机器上安装了Informix ClientSDK - 还有Perl和DBI等),他们就可以构建DBD::Informix以使其与已安装的Perl配合使用。
我强烈建议您安排您的Perl接口代码以源代码形式提供,即使它所接口的库是专有的。这允许人们在任何他们拥有的Perl版本上安装代码 - 而无需您处理不一致性。
如果您仍然想提供二进制支持,您将需要确定要支持哪些平台,并在每个这样的平台上使用标准版本的Perl构建模块。这会变得混乱。您需要访问每台机器的实例。虚拟机使这变得更容易,但仍然很麻烦,而且平台和版本的数量仅增加。但是,您仍然需要支持那些没有在其机器上使用标准版本的Perl的人 - 这就是为什么必须以源代码形式提供Perl包装器接口的原因。

我之前没有想到过,但是是的,我认为我们可以将我们的专有内容分发到一个库(共享或静态)中,并且只提供 SWIG 生成的代码作为可构建模块。 - Mike Ellery

1

免责声明:我几乎没有创建可轻松安装的二进制包的经验。因此,我将此帖子设为 CW,以便其他人更容易添加他们的建议。

您应该提供源代码形式的发行版,以便可以根据系统的具体情况在每个系统上进行编译。我非常喜欢 Module::Build 用于此目的。

对于 Windows 上的 ActiveState 用户,您可能需要基于是否要支持 5.6 创建四个或六个 PPMs。为每个 5.65.85.10 版本都打包 32 位和 64 位版本。使用您可以使用 ppm 安装的 mingw 版本来编译模块,以保留二进制兼容性。

另一个选择是使用 PAR::Packer 并将您的应用程序分发在 PAR 存档中。在这种情况下,PAR::WebStart 可能会有所帮助,尽管我没有尝试过。我以前使用 PAR 存档取得了成功。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接