如何使用 GCC 4.4.6 从 RHEL6 机器编译 RHEL5 兼容的共享库

How do I compile RHEL5 compatible shared library from RHEL6 machine with GCC 4.4.6?

本文关键字:RHEL5 共享 编译 机器 GCC 何使用 RHEL6      更新时间:2023-10-16

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

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

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

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

据此:我可以在 Redhat Linux 机器上使用在 Ubuntu 上编译的共享库吗?

我的 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 全局默认值 UND eventfd@@GLIBC_2.7

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

您可以将

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

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

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