【问题标题】:Compile C++ for all linux distributions为所有 linux 发行版编译 C++
【发布时间】:2010-12-06 08:04:58
【问题描述】:

如何编译我的 C++ 文件以在所有 Linux 发行版上工作。 我将在其上编译它们的机器是 Ubuntu 10.10

如果我在 Ubuntu 10.10 上编译它们,它们是否可以在其他发行版(如 ubuntu、fedora、debian、非 debian 发行版......等)上运行?

【问题讨论】:

    标签: c++ linux


    【解决方案1】:
    % gcc -o foo foo.c -static
    

    生成的二进制文件应该可以在大多数发行版上运行,因为它运行在相同的架构(64 位、32 位、arm、mips 等)上。

    要点是:由于您事先不知道可以在目标系统上找到什么,因此您必须将所有可以找到的东西捆绑到您正在运送的二进制文件中,或者在您部署的某种“chrooted”环境中外部库也是如此(不能静态链接的东西),然后有某种包装器来使用您部署的库而不是系统库。

    【讨论】:

    【解决方案2】:

    虽然@akira 的回答可能适用于您的情况,但这并不是最好的解决方案。大多数 Linux 发行版都有打包系统,可以为您检索依赖项。

    如果您认真编写在其他人的机器上使用的 Linux 软件,您将需要研究“GNU Autotools”,它是驱动您将拥有的“./configure && make all && make install”的东西现在运行不止一次!

    【讨论】:

    • 嗯,项目不开源?
    • @Daniel 你最好还是自己使用 Autotools,即使你没有免费提供代码!否则,当您的代码所依赖的库发生更改时,您的生活会很困难,但就像我说的@akira idea 很可能会做您想做的事情。
    • 如果他的项目需要 GPL 下的 Autotools,即使只是在分发之前构建他的软件,他自己的软件在 GPL 不兼容的许可证下是否合法? (这是一个严肃的问题,而不是 GPL 火焰诱饵。)
    • 如果你只分发二进制文件,当然是合法的。 GPL 涵盖“衍生作品”,意思是“剪切和粘贴”源代码以创造新事物,而不是使用工具来帮助您做其他事情。同样,使用 Word 不会赋予 Microsoft 小说的版权。
    【解决方案3】:

    这比它应该做的要难,至少对于 C++:http://www.trilithium.com/johan/2005/06/static-libstdc/

    【讨论】:

      【解决方案4】:

      如果您只使用 Linux 标准库中列出的库,那么动态可执行文件应该没问题。

      对于其他库,要么链接它们的静态版本,要么发布动态库;我更喜欢前者。

      我个人建议避免静态链接 C 库,因为这会妨碍它提供的一些有用功能,例如 nss 的东西..

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-02-15
        • 1970-01-01
        • 2011-03-08
        • 1970-01-01
        • 2012-08-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多