编译许多Linux发行版

时间:2010-11-17 01:17:07

标签: linux distribution cross-compiling

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

问题在于OCaml开发系统并不是那么简单,因此我不想以各种操作系统的二进制方式发布它。

  • Windows没有问题,因为我可以通过cygwin编译它并使用所需的dll
  • 进行分发
  • OS X也不是问题,因为我可以编译它并轻松分发它(没有我尝试过的外部依赖)

到达Linux时出现问题,因为我不知道编译和分发它的最佳方法是什么。程序本身不依赖于任何东西(一切都是静态链接的),但如何涵盖许多发行版?

我有一个使用amd64架构虚拟化的ubuntu服务器10,我使用这台机器在Linux下测试程序,一切正常。当然,如果我试图将二进制文件移动到32位ubuntu它停止工作,我无法尝试不同的发行版...是否有技巧来管理这种问题? (这似乎反复出现)

例如:

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

5 个答案:

答案 0 :(得分:3)

  • 您通常可以相对轻松地在64位计算机上生成64位和32位二进制文​​件 - 即分发通常在其编译器包中具有适当的支持,您实际上可以测试您的构建。请注意,操作系统也需要64位,而不仅仅是CPU。

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

  • 你至少应该用dpkg软件包定位Debian / Ubuntu,用RPM重新定位Redhad / Fedora / Mandriva,再用RPM定用SUSE / OpenSUSE(我分别提到这两个RPM案例,因为你可能需要为这些创建单独的软件包发行的“家庭”)。您还应该为其余部分提供.tar.bz2或.run安装程序。

  • 您可以查看例如提供的选项。 Oracle for Java和VirtualBox看看他们如何提供他们的软件。

答案 1 :(得分:1)

最佳解决方案是在免费许可下发布源代码。您可以自己将其打包为几个发行版(例如DebianFedora),然后与将其移植到其他人的其他人合作。维护人员通常只需要进行一些必要的上游更改即可完成大部分工作。

答案 2 :(得分:1)

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

很可能在Ubuntu上运行的二进制文件将在其他发行版上运行,如果您使用共享库,则唯一需要担心的事情(特别是如果您使用某些GUI框架或类似的东西)。

不确定分支是什么意思,但如果你在谈论分发,我会使用最普通的Ubuntu发行版......

答案 3 :(得分:1)

您可以在openSUSE Build Service中查看构建它。虽然由openSUSE运行,但它将为以下内容构建包:

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

答案 4 :(得分:0)

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

只需提供有关依赖关系的明确安装说明,其他发行版的命令行fu等等,您只需分发源代码压缩包就不会有太大问题。