【问题标题】:Does LD_PRELOAD work on all flavors of unix/linux?LD_PRELOAD 是否适用于所有版本的 unix/linux?
【发布时间】:2012-06-09 08:52:36
【问题描述】:

我写了一个简单的 LD_PRELOAD 模块,在 Ubuntu 服务器上编译。此预加载是否适用于其他系统,如 Solaris、FreeBSD、CentOS 等。在某些操作系统上是否有任何特殊问题?

【问题讨论】:

  • 你的意思是生成的二进制文件?不,不会的。它是特定于 Linux 的。
  • @H2CO3,所以,我不能在像 Freebsd 这样的 unix 系统上使用 Ubuntu 编译的 LD_PRELOAD?我该做什么?也许在 Freebsd 上重新编译?
  • 是的,完全正确。如果您的目标平台与 Linux 不兼容 ABI(FreeBSD 不兼容,AFAIK),那么您必须重新编译。
  • @H2CO3 感谢您的回答,您能告诉我,我应该在哪个操作系统上编译 LD_PRELOAD 以在大多数 unix/linux 系统上工作?谢谢!
  • @H2CO3 没有理由是 Linux 特定的

标签: c++ linux unix ubuntu ld-preload


【解决方案1】:

LD_PRELOAD 机制适用于所有 ELF 系统(Linux、Solaris 等)。

理论上,如果架构匹配,相同的库可以在不同的操作系统上使用(例如,i386 库无法在 Solaris SPARC 上运行),但存在许多缺陷。例如,C库提供的许​​多数据结构大小和成员排列方式不同,即使架构相同,它们也会在操作系统之间不兼容。

如果您对在LD_PRELOAD 库中调用的函数非常小心,那么您可以创建一个在操作系统之间兼容的库。您肯定需要对其进行测试。

【讨论】:

  • 更正:您的意思是“所有”(大多数?)动态链接的 ELF 系统。 LD_PRELOAD 绝对不适用于静态链接的 ELF 系统。
  • 好点,@R.. 我想知道是否(仍然)存在任何支持 ELF 但不支持动态链接的系统!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多