【问题标题】:Building C++ binaries that work on RHEL and SLES构建适用于 RHEL 和 SLES 的 C++ 二进制文件
【发布时间】:2016-05-30 22:01:41
【问题描述】:

我需要从可以在 RedHat 和 SuSE 发行版上运行的 C++ 代码构建单个二进制文件。我需要分发二进制文件,因为我无法共享源代码。在这些限制条件下操作,我认为一种方法是将兼容版本的 libstdc++ 与我的二进制文件一起发布,并使用 rpath 或 ldconfig 将其链接到它。

  1. compat-libstdc++ 在这种情况下有用吗?它有什么作用?
  2. 假设 Centos / RHEL 7 和 OpenSuSE / SLES 11,我如何确定哪个是兼容的 libstdc++ 版本,可在这两种操作系统上运行?

由于多种原因,我无法静态链接,包括 LGPL 中的衍生工作条款等。

【问题讨论】:

  • 编译静态二进制文件?
  • 更新了为什么我不能静态链接的问题。

标签: c++ centos compatibility opensuse


【解决方案1】:

当您为不同的 Linux 发行版分发二进制文件时,您可以将所有依赖的库(包括 libstdc++)与您的二进制文件一起放入一个包中 - 您还可以在二进制文件中将 RPATH 设置为 $ORIGIN,以便它会在您的二进制文件的目录中查找库.这样它就可以与大多数 linux 发行版一起使用。

【讨论】:

  • 我构建了一个二进制文件——不是针对不同发行版的不同版本。这是一个不寻常的约束,但事实就是如此。
  • @CppNoob - 好吧,如果您不能分发除 1 个文件之外的任何内容,那将无济于事。但我说的是适用于不同发行版的单个包(二进制 + 库),而不是不同的包。
  • 问题更多的是关于 libstdc++ 版本和跨发行版的 ABI 兼容性。我了解 rpath 的工作原理,但我应该包括哪些版本的 libstdc++ - 这就是问题所在。识别版本的一般策略是什么 - 给定目标发行版和版本,这就是问题所在。
猜你喜欢
  • 2012-08-24
  • 2018-07-04
  • 2021-10-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-26
  • 1970-01-01
  • 2011-05-26
相关资源
最近更新 更多