【问题标题】:How do I compile RHEL5 compatible shared library from RHEL6 machine with GCC 4.4.6?如何使用 GCC 4.4.6 从 RHEL6 机器编译 RHEL5 兼容共享库?
【发布时间】:2014-11-27 15:44:18
【问题描述】:

注意:我是一名 C# Windows 开发人员,刚刚进入 C++/Linux 世界。

我有一个基于 BOOST 的跨平台 C++ 代码,我需要将其编译为共享库:

  • 视窗
  • RHEL6
  • RHEL5 和
  • 索拉里斯

我有 Windows 和 RHEL6 机器并且已经成功地为它们构建。 Solaris 构建当前并不重要。

据此: Can I use a shared library compiled on Ubuntu on a Redhat Linux machine?

我的 RHEL6 编译共享库无法在 RHEL5 上运行,因为以下命令:

readelf -s /path/to/your/library.so | egrep 'GLIBC_2.([6-9]|10)'

返回 GLIBC2.7 依赖:

143: 00000000 0 FUNC 全局默认值和 eventfd@GLIBC_2.7 (14)
9069: 00000000 0 FUNC 全局默认设置 eventfd@@GLIBC_2.7

我想知道是否有一种方法可以通过 RHEL6 机器为 RHEL5 构建? 或者任何其他提案都可以。谢谢。

【问题讨论】:

  • 您从该命令得到的答案是 如果输出非空,则该库将无法在 RHEL-5 上运行。
  • 尝试在 chroot 目录中引导 rhel5,并从那里构建。
  • 快速谷歌搜索得到了这个:github.com/bbockelm/RHEL5-chroot,这似乎是为此目的而设计的。
  • 对不起,我的意思是设置,而不是引导程序。
  • @ElliottFrisch 是的,这是提出这个问题的主要动机。

标签: c++ linux rhel5 rhel6


【解决方案1】:

您可以将您的共享库与-Wl,-rpath,'$ORIGIN' 链接,并在同一目录中提供所有必需的库。

但是,如果您的库头文件中有任何使用 C++ 标准库中的任何类型的内容,那么您就是在自找麻烦。您的库的用户必须使用相同的 C++ 编译器和标准库来构建和链接他们的应用程序。

最便携的选项是提供一个带有 C API 的共享库以及 C++ 仅标头包装器,用户可以使用任何 C++ 编译器构建它。

【讨论】:

  • 感谢您的回答。所以基本上,如果我理解你的话,你说的答案是否定的可持续解决方案。
  • @Visar 一个例子:我在工作中使用了一些装有 CentOS 6.x 的机器,库存的 gcc 是 4.4.7。但是,我使用自己的 gcc-4.9.2。 gcc-4.4.7 C++ ABI 与 4.9.2 不兼容,所以我无法使用你用 4.4.7 编译的 C++ 库。
猜你喜欢
  • 1970-01-01
  • 2018-06-12
  • 1970-01-01
  • 1970-01-01
  • 2013-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多