【问题标题】:Is it sensible to build an application with static linking on linux?在 linux 上使用静态链接构建应用程序是否明智?
【发布时间】:2012-07-09 13:09:51
【问题描述】:

我需要构建一个在嵌入式供应商提供的 linux 版本上运行的应用程序。根据文档,它具有 libc 版本 2.8.90。我在桌面上用 C++ 构建了一个简单的应用程序,并将二进制文件连同它所链接的库的副本一起复制到硬件中。为了消除链接到不同版本库的任何潜在冲突,我考虑尝试静态链接到库。经过一番研究,我找到了following question and answers,并在阅读后给人的印象是静态链接不是一件好事。我在这里(或到目前为止其他任何地方)找不到的是一个简单的解释,解释了为什么这似乎不受欢迎。在我看来(几乎是 linux 的新手)是一种解决我将可执行文件捆绑为单个包并在我的硬件上运行它的问题的方法,但显然这似乎被认为是一个坏主意,但有人可以解释一下为什么??

显然我知道这会导致我的二进制文件膨胀,但我并不担心。此外,我知道许可问题,但我并不特别关心这方面的事情。这不是商业应用,所以我不认为它适用于我。

【问题讨论】:

  • 您的应用程序是否商业化与 LGPL 的重新链接要求无关。您必须允许您的软件与不同的库重新链接。您的应用程序在网络上完全可用这一事实是否符合该要求从未在法庭上进行过测试。

标签: linux gcc g++ static-libraries static-linking


【解决方案1】:

优势在于,正如您所期望的,无需安装其他依赖项即可工作的单个二进制文件,并且您可以轻松移动它。

如果链接库有更新(例如安全修复)以及许可问题(如您所述),则缺点是大小和需要重新编译整个应用程序。

权衡。如果它解决了你的问题,那就去吧。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多