2010-03-05 26 views
4

這可能是一個多部分問題。背景:我們有一個本地(C++)庫,它是我們應用程序的一部分,我們設法使用SWIG爲這個庫生成一個perl包裝器。我們現在想分發這個perl模塊作爲我們應用程序的一部分。我應該如何分發預構建的perl模塊,以及我爲哪個版本的perl構建?

我的第一個問題 - 我該如何分配這個模塊?有沒有一種標準的方式來打包預構建的perl模塊?我知道ActiveState發行版有ppm,但我也需要爲Linux系統分發這個版本。我甚至不知道需要分發哪些文件,但我至少猜測它是下午和所有文件。

我的下一個問題 - 它看起來像我可能需要爲我想支持的每個perl版本構建我的模塊項目。我如何知道我應該爲哪些perl版本構建?是否有任何標準指南......或更好的方法來構建一個可以與多個版本的Perl一起工作的軟件包?

對不起,如果我的問題沒有任何意義 - 我對Perl的已編譯模塊方面相當陌生。

澄清:底層的編譯源代碼是專有的(封閉源代碼),所以我不能發佈源代碼和相應的包製作工件。希望我能,但在這種情況下不會發生。因此,我需要一個理想的方案來打包我的模塊的預構建二進制文件。

+0

請參閱http://stackoverflow.com/questions/2201637/need-good-resources-that-guide-through-the-process-of-creating-perl-modules-packa – Ether 2010-03-05 18:09:39

+1

這有點不同 - 編譯的二進制發行版與基於CPAN的標準發行版相比較。這就是說,這是一個很好的資源。 – 2010-03-05 18:54:11

回答

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包裝器接口需要以源代碼形式提供的原因。

+0

我沒有想過......但是,我認爲我們可以將我們的專有資料分發到庫中(共享或靜態),只需將SWIG生成的代碼作爲可構建的模塊提供即可。 – 2010-03-21 13:32:26

1

免責聲明:我幾乎沒有經驗可以創建可輕鬆安裝的二進制包。因此,我正在編寫這篇CW文章,以便其他人更容易地添加他們的建議。

您應該使源代碼可用,以便可以根據系統的具體情況對每個系統進行編譯。爲此我真的很喜歡Module::Build

對於Windows上的ActiveState用戶,根據是否要支持5.6,您可能希望擁有四個或六個PPM。爲5.65.85.10中的每一個打包32位和64位版本。使用您可以使用ppm安裝的mingw版本來編譯模塊以保持二進制兼容性。

另一種選擇是使用PAR::Packer並將您的應用程序分發到PAR歸檔中。在這方面,PAR::WebStart可能是有用的,雖然我還沒有嘗試過。不過,我以前在PAR檔案館取得了成功。

相關問題