编译许多Linux发行版

简而言之,我将发布一个用OCaml编写的应用程序,并且计划通过源代码来分发它。

问题在于OCaml开发系统并不是那么普通的安装,所以我想以各种操作系统的二进制方式发布它。

  • Windows没有问题,因为我可以通过cygwin编译它,并将其与所需的dll分发
  • OS X并不是一个问题,因为我可以编译它并轻松分发(没有从我尝试过的外部依赖项)

当到达Linux问题到达时,我不知道哪个编译和分发是最好的。 程序本身不依赖于任何东西(所有东西都是静态链接的),但是如何涵盖许多发行版?

我有一个Ubuntu的服务器10与amd64架构虚拟化,我用这台机器在Linux下testing程序,一切工作正常。 当然,如果我尝试将二进制文件移动到一个32位的Ubuntu的,它停止工作,我一直没有能够尝试不同的分配…是否有技巧来pipe理这种问题? (似乎反复出现)

例如:

  • 我可以在同一台机器上同时编译32位和64位吗?
  • 会在ubuntu下编译的二进制文件在其他发行版上运行吗?
  • 当我想要覆盖尽可能多的发行版时,我应该考虑哪些“分支机构”?

  • 一般情况下,你可以在一台64位的机器上生成64位和32位的二进制文件,也就是说,这个分​​发版本通常在其编译器包中有适当的支持,你可以真正的测试你的版本。 请注意,操作系统也需要64位,而不仅仅是CPU。

  • 静态二进制文件通常在任何地方运行,从内核和CPU提供足够的支持 – 请留意你的编译器选项以确保这一点。 它们是兼​​容性的最佳选择。 共享库可能是一个问题。 为了解决这个问题,与共享库链接的二进制文件可以与这些库捆绑在一起,并在需要时使用加载脚本运行。

  • 你至少应该使用dpkg包来管理Debian / Ubuntu,使用RPM的Redhad / Fedora / Mandriva和使用RPM的SUSE / OpenSUSE(我分别提到这两个RPM的情况,因为你可能需要为这些发行版的“家族”生成单独的包) 。 其余的还应该提供.tar.bz2或.run安装程序。

  • 您可以查看Oracle for Java和VirtualBox提供的选项,以了解它们如何提供其软件。

最好的解决方案是在免费许可下发布源代码。 你可以自己打包发行(如Debian , Fedora ),然后与其他人合作将其移植到其他人。 维护人员通常只需要进行少量必要的上游更改即可完成大部分工作。

是的,你可以编译32位和64位从同一台机器: http : //gcc.gnu.org/onlinedocs/gcc/i386-and-x86_002d64-Options.html

最有可能在Ubuntu上运行的二进制文件将在其他发行版上运行,如果您使用的是共享库(尤其是如果使用某种GUI框架或类似的东西),则只需要担心。

不知道你是什么意思的分支,但如果你在谈论分配,我会使用最香草的Ubuntu发行…

你可以看看在openSUSE构建服务中构建它。 虽然由openSUSE运行,但是它将为以下内容构建软件包:

  • openSUSE SUSE
  • 企业变种
  • Mandiva
  • Fedora的
  • 红帽企业/ CentOS
  • Debian的
  • Ubuntu的

我建议你只打包一个32位和64位二进制文​​件.deb和RPM,这样你可以打大部分主要的发行版(Debian,Fedora,openSUSE,Ubuntu)。

只要给出关于依赖关系的明确的安装说明,其他发行版的命令行等等,你应该没有太多的问题,只是分发一个源代码tarball。