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

时间:2014-11-27 15:44:18

标签: c++ linux rhel5 rhel6

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

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

  • Windows
  • RHEL6
  • RHEL5和
  • 的Solaris

我有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 GLOBAL DEFAULT UND eventfd@GLIBC_2.7(14)
  9069:00000000 0 FUNC GLOBAL DEFAULT UND   eventfd @@ GLIBC_2.7

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

1 个答案:

答案 0 :(得分:1)

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

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

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