注意:我是刚进入C ++ / Linux世界的C#Windows开发人员。
我有一个基于BOOST的跨平台C ++代码,我需要将其编译为共享库:
我有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构建? 或者任何其他提案都可以。感谢。
答案 0 :(得分:1)
您可以将您的共享库与-Wl,-rpath,'$ORIGIN'
链接,并在同一目录中提供所有必需的库。
但是,如果库头中有任何内容使用C ++标准库中的任何类型,那么您就会遇到麻烦。您的库的用户必须使用相同的C ++编译器和标准库来构建和链接他们的应用程序。
最便携的选择是提供一个带有C API的共享库以及C ++仅包头的包装器,用户可以使用任何C ++编译器构建它。