2010-11-17 27 views
3

簡而言之,我將發佈一個用OCaml編寫的應用程序,並且我計劃通過源代碼發佈它。爲很多linux發行版編譯

問題是,OCaml開發系統不是那麼輕便,既不常見,所以我想以各種操作系統的二進制方式發佈它。

  • 的Windows是沒有問題,因爲我可以通過cygwin的編譯,並與所需的DLL分發
  • OS X是不是問題太多,因爲我可以編譯它,從容易分發(沒有外部的依賴我已經試過)

當到達Linux問題到來時,因爲我不知道哪一個是編譯和分發它的最好方法。程序本身不依賴於任何東西(所有東西都是靜態鏈接的),但是如何涵蓋許多發行版?

我有一個用amd64架構虛擬化的Ubuntu服務器10,我用這臺機器在Linux下測試程序,一切正常。當然,如果我嘗試將二進制文件移動到32位ubuntu上,它將停止工作,並且我無法嘗試不同的發行版......有沒有辦法管理這類問題? (即似乎重複)

例如:

  • 我可以從在同一臺機器編譯32位和64?
  • 將在ubuntu下編譯的二進制文件在其他發行版上運行嗎?
  • 哪個「分支」應該考慮什麼時候想要覆蓋儘可能多的發行版?

回答

3
  • 您通常可以產生在64 64個32位二進制文​​件相對容易 - 即分發通常在其編譯程序包中有適當的支持,你可以真正測試你的構建。請注意,操作系統也需要64位,而不僅僅是CPU。

  • 靜態二進制文件通常到處運行,爲內核和CPU提供了足夠的支持 - 關注編譯器選項以確保這一點。它們是兼​​容性的最佳選擇。共享庫可能是一個問題。爲了解決這個問題,與共享庫鏈接的二進制文件可以與這些庫捆綁在一起,並在需要時使用加載腳本運行。

  • 你至少應該使用dpkg軟件包,帶有RPM的Redhad/Fedora/Mandriva和使用RPM的SUSE/OpenSUSE重新定位Debian/Ubuntu(我分別提及這兩個RPM情況,因爲你可能需要爲這些「家庭「分配)。您還應該爲其餘的提供.tar.bz2或.run安裝程序。

  • 你可以看看例如, Oracle for Java和VirtualBox來了解他們如何提供他們的軟件。

1

最好的解決方案是在免費許可下發布源代碼。您可以自己打包分發給幾個發行版(例如Debian,Fedora),然後與其他人合作將其移植到其他人。維護人員通常只需要進行少量必要的上游更改即可完成大部分工作。

0

我建議你只需打包一個32位和64位二進制文​​件,用於.deb和RPM,這樣你就可以打到大部分主要發行版(Debian,Fedora,openSUSE,Ubuntu)。

只要給出關於依賴關係的明確安裝說明,其他發行版的命令行fu等等,你應該沒有太多問題只是分發一個源代碼tarball。

1

是的,你可以編譯從同一臺機器32個和64位: http://gcc.gnu.org/onlinedocs/gcc/i386-and-x86_002d64-Options.html

最有可能在Ubuntu二進制運行將在其他發行版上運行,你不必擔心,如果你是唯一使用共享庫(尤其是如果你使用一些GUI框架或類似的東西)。

不知道你的分支的意思,但如果你是在談論分配,我會用最香草Ubuntu發行版...

1

您可以看看在openSUSE Build Service中構建它。雖然openSUSE的運行,這將建立包:

  • openSUSE的SUSE
  • 企業變種
  • Mandiva
  • 的Fedora
  • 的Red Hat Enterprise/CentOS的
  • Debian的
  • Ubuntu的