首页 > 解决方案 > LD_PRELOAD 多个相互依赖的库

问题描述

我有一个带有依赖树的库,即一些依赖项有我想要预加载的其他依赖项。我怎样才能做到这一点?

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

调用 contains 已排序,因此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.

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

标签: shared-librarieslddynamic-libraryld-preload

解决方案


这个错误:

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. 该文件适用于错误的体系结构(例如 32 位 ELF 时MyApp为 64 位,反之亦然)。使用file MyAppfile libQt5Core.so.5确认它们匹配。
  3. 别的东西。也许MyAppnewlibor相关联uClibc,但libQt5Core.so.5使用 GLIBC 构建(反之亦然)。

推荐阅读