如何使用 GCC 4.4.6 从 RHEL6 机器编译 RHEL5 兼容的共享库
How do I compile RHEL5 compatible shared library from RHEL6 machine with GCC 4.4.6?
注意:我是一名刚刚进入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++编译器构建这些包装器。
相关文章:
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- 是否可以通过C++扩展强制多个python进程共享同一内存
- 在cuda线程之间共享大量常量数据
- 如何从具有移动语义的类对象中生成共享指针
- 在c代码之间共享数据的最佳方式
- 在两个类中共享相同的函数调用,并在不需要时避免空实例化
- 将静态库链接到不带-fPIC的共享库中
- 为什么std::互斥需要很长的、非常不规则的时间来共享
- 使用Boost Interprocess创建托管共享内存需要很长时间
- 无法在Ubuntu上将共享库与Eclipse链接
- 从python调用openMP共享库时,未定义opnMP函数
- 在为LINUX创建共享库时,如何避免STL的私有/弱副本
- 为什么我的共享库中存在展开符号
- 使用共享指针的函数调用,其对象应为 const
- 具有两个独占锁组的共享锁
- 共享队列的线程安全
- 共享指针和具有自定义删除程序的唯一指针之间的语法差异背后的任何原因
- 多个"常量引用"变量可以共享同一个内存吗?
- 如何访问由共享指针保存的类方法?
- 如何使用 GCC 4.4.6 从 RHEL6 机器编译 RHEL5 兼容的共享库