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

时间:2009-11-21 08:18:35

标签: c++ ubuntu shared-libraries redhat

我在Ubuntu 9.10桌面上编译了一个共享库。我想将共享库发送给拥有Red Hat Enterprise 5盒的联合开发人员。

他可以在他的机器上使用我的共享库吗?

5 个答案:

答案 0 :(得分:5)

第一点:关于编译器版本的所有答案似乎都是错误的。重要的是联系(当然还有架构)。

如果将 .so 文件复制到启动系统(例如,复制到其自己的/usr/local/*/opt/*目录中),请尝试使用 .so 文件运行预期的可执行文件LD_PRELOAD环境设置。如果链接器(ld-linux.so)设法解析两者之间的所有符号,那么程序应该加载并运行。

所以它应该是可能的,并且相当安全(只要你没有覆盖任何现有的系统库并只使用LD_ * /etc/ld.so.preload(在一个chroot中?)魔术链接目标该库的可执行文件。

然而,我认为这是一个坏主意。您有包管理问题。 Ubuntu和Red Hat都有精美的包管理工具。使用它们! (注意提问包管理问题的适当位置是ServerFault或SuperUser,绝对不是SO)。

答案 1 :(得分:2)

不太可能:你不会问这个问题是否合适,是吗?

根据DistroWatch,Ubuntu 9.10使用glibc-2.10.1,而RHEL-5.4使用glibc-2.5。这意味着如果您的库引用版本为GLIBC_2.6及更高版本的任何符号,则它将无法在RHEL-5上运行。

您可以判断是否使用任何此类符号(以及哪些符号):

readelf -s /path/to/your/library.so | egrep 'GLIBC_2.([6-9]|10)'

如果输出非空,则该库将无法在RHEL-5上运行。

您可以使用autopackage构建与RHEL-5兼容的库。

答案 2 :(得分:0)

我加入Xinus。恕我直言编译器,在Ubuntu和RHEL的情况下,它将是gcc,与glibc紧密耦合。因此,如果在两台机器上它都是相同的,那么它很可能会运行起来。

但是为什么猜测,做一个小试驾(主要有几行),如果它正在运行,那么一个更大的程序很可能在“敌对”环境中运行:)

答案 3 :(得分:0)

最佳解决方案是将您的代码提供给您的开发人员, 让我们编译它!!!!

你有几个解决方案

  • 将他的gcc升级到与
  • 相同的版本
  • 在您的计算机上安装他的gcc版本并进行编译

您必须检查是否都使用相同的32位或64位架构。

我的意见是你可能遇到一些问题,因为你可能不会使用相同的glibc

答案 4 :(得分:0)

是的,这是可能的。为您的合作伙伴提供一个静态库,并使您的 gcc 保持相同或兼容的版本。你可以在这里查看我的帖子:https://zqfan.github.io/2021/07/01/cpp-static-library/