1

注意:我是一名刚刚进入 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 全局默认值和 eventfd@@GLIBC_2.7

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

4

1 回答 1

1

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

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

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

于 2014-11-27T15:57:24.147 回答