LD_PRELOAD 多个相互依赖的库

LD_PRELOAD multiple interdependent libraries

我有一个带有依赖关系树的库,即一些依赖关系有我想要预加载的其他依赖关系。我该怎么做?

LD_PRELOAD \
/opt/yocto/2.5.1/sysroots/core2-64-poky-linux/usr/lib/libicudata.so.60 \
/opt/yocto/2.5.1/sysroots/core2-64-poky-linux/usr/lib/libicuuc.so.60 \
/opt/yocto/2.5.1/sysroots/core2-64-poky-linux/usr/lib/libicui18n.so.60 \
/opt/yocto/2.5.1/sysroots/core2-64-poky-linux/usr/lib/libQt5Core.so.5 \
MyApp

LD_PRELOAD 调用包含已排序,因此依赖项列在依赖库之前。

链接器抛出以下错误:

ERROR: ld.so: object '/opt/yocto/2.5.1/sysroots/core2-64-poky-linux/usr/lib/libQt5Core.so.5' from LD_PRELOAD cannot be preloaded (cannot open shared object file): ignored.

能否预加载库以按正确的顺序完成依赖项?

这个错误:

ld.so: object '/opt/yocto/2.5.1/sysroots/core2-64-poky-linux/usr/lib/libQt5Core.so.5' \
from LD_PRELOAD cannot be preloaded (cannot open shared object file): ignored.

表示动态加载程序尝试打开库但失败了。

此失败有多种可能的原因:

  1. 该文件不存在(使用ls -L /opt/yocto/2.5.1/sysroots/core2-64-poky-linux/usr/lib/libQt5Core.so.5确认它存在
  2. 该文件适用于错误的体系结构(例如,当 MyApp 是 64 位时,32 位 ELF,反之亦然)。使用 file MyAppfile libQt5Core.so.5 确认它们匹配。
  3. 别的。也许 MyAppnewlibuClibc 相关联,但 libQt5Core.so.5 是使用 GLIBC 构建的(反之亦然)。