【问题标题】:How can I compile C on Linux that will work on any distro?如何在 Linux 上编译适用于任何发行版的 C?
【发布时间】:2014-03-25 17:57:46
【问题描述】:

如果我使用 gcc 编译一个自包含项目并静态链接 C 运行时库,这是否适用于任何 Linux 发行版?只要它有效,我不关心任何静态链接的缺点(例如大文件大小)。这是一个闭源项目,这超出了我的控制范围。 PC的架构是一样的。

【问题讨论】:

  • 是什么样的项目?我建议将其制作为免费软件并将其打包用于 Debian .... 静态链接有几个问题....
  • 它关闭了源代码项目,这是我无法控制的。
  • 然后,准备好处理几个问题。例如,静态链接对 nssswitch.conf(5) 不友好 - 在网络应用程序中使用很多 - 和 dlopen(3)
  • 您能告诉我们您(或您的雇主)正在努力实现的目标吗?即使对于闭源项目,C 运行时传统上也不是静态链接的。
  • 无论是x86,x86_64,arm还是其他什么都是底层硬件的问题,不是发行版的问题。如果你为x86_64编译它只会在x86上运行而不是在arm上,甚至是x86 .

标签: c linux gcc


【解决方案1】:

如果您可以保证它将执行的所有代码都包含在您发布的二进制文件中,那么理论上(强调理论上)它应该适用于任何 Linux 发行版。在这个过程中有大量的陷阱。我个人的看法是,由于跨版本的接口变化,几乎不可能完成这项工作。与其他库的交互是一场脆弱的噩梦。

我熟悉的大多数公司(包括我自己的公司)都会为不同的发行版制作版本。必须为 SLES、Redhat 等进行构建会导致一些复杂情况,但我相信提供一些不同的构建最终会比尝试静态链接所有内容更简单并且导致的问题更少。

【讨论】:

  • 这个库只包含两个简单的函数,它们永远不会改变,如果它们改变了,我可以重新编译它。
  • 也许你的情况是个例外,那么如果它那么简单的话。
  • 我曾经不得不在嵌入式设备上使用一些“数学”函数,我们实际上在源代码中包含了它们的实现。我们这样做是为了尺寸,而不是为了便携性,但如果它真的那么简单,你可能可以做到。
  • 你必须按照这本书开始Linux编程,其中清楚地提到了我们如何创建静态库或连接静态库。默认情况下,我们的 Linux 使用动态库。
猜你喜欢
  • 2017-09-02
  • 2012-08-11
  • 2011-11-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多